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?
By default, the a
instance is an instance of Fruit
and is not convertible to Apple
. It's not an Apple
instance, and will never be.
You can, however, implement an explicit cast.
In your model, a Fruit
is not an Apple
- if you want an Apple
, instantiate one. Alternatively, if you want to create an Apple
using a Fruit
as a starting point, create a constructor for Apple
that can accept a Fruit
.
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 Fruit
and Apple
need to be concrete and instantiable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With