What's the best way to initialize constants or other fields in inherited classes? I realize there are many syntax errors in this example, but this is the best example to explain clearly what I am trying to do.
public abstract class Animal {
public abstract const string Name; // #1
public abstract const bool CanFly;
public abstract double Price; // price is not const, because it can be modified
public void Fly() {
if (!CanFly)
Debug.Writeln("{0}s can't fly.", Name);
else
Debug.Writeln("The {0} flew.", Name);
}
}
public class Dog : Animal {
public override const string Name = "Dog"; // #2
public override const bool CanFly = false;
public override double Price = 320.0;
}
public class Bird : Animal {
public override const string Name = "Bird";
public override const bool CanFly = true;
public override double Price = 43.0;
}
A few things I'm trying to accomplish:
- Base classes must assign these 3 fields.
- Ideally I would want these initialized fields to be together at the top of the class so I can see which constants I assigned to each class and change them whenever needed.
- The fields Name and CanFly cannot be changed.
I know that you could initialize these fields in a constructor (if you get rid of the const), but then they aren't guaranteed to be assigned. If you have these fields as properties instead and override them, you would still need to initialize the backing field of the property. How would you implement this?
A few syntax errors it complains about:
- The modifier 'abstract' is not valid on fields. Try using a property instead. (#1)
- A const field requires a value to be provided (#1)
- The modifier 'override' is not valid for this item (#2)