I was wondering how to do this, consider the following classes
public class Fruit
{
public string Name { get; set; }
public Color Color { get; set; }
}
public class Apple : Fruit
{
public Apple()
{
}
}
How can I instantiate a new fruit but upcast to Apple, is there a way to instantiate a bunch of Fruit and make them apples with the name & color set. Do I need to manually deep copy?
Of course this fails
Fruit a = new Fruit();
a.Name = "FirstApple";
a.Color = Color.Red;
Apple wa = a as Apple;
System.Diagnostics.Debug.Print("Apple name: " + wa.Name);
Do I need to pass in a Fruit to the AppleCTor and manually set the name and color( or 1-n properties) Is there an better design to do this?
In your model, a
Fruitis not anApple– if you want anApple, instantiate one. Alternatively, if you want to create anAppleusing aFruitas a starting point, create a constructor forApplethat can accept aFruit.You should note, that object models where intermediate classes in the inheritance hierarchy are instantiable (not abstract) is often a bad idea. In some cases, such hierarchies may be appropriate – but I’ve found that in general they are more trouble than they are worth. Think really hard about whether both
FruitandAppleneed to be concrete and instantiable.