如何实例化基类,然后将其转换为派生类?

Eri*_*ric 4 c# polymorphism casting

我想知道如何做到这一点,考虑以下类

public class Fruit
{
    public string Name { get; set; }
    public Color Color { get; set; }
}
public class Apple : Fruit
{
    public Apple()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我如何实例化一个新的水果,但转发到苹果,有没有办法实例化一堆水果,并使他们苹果与名称和颜色设置.我需要手动深层复制吗?

当然这失败了

Fruit a = new Fruit();
a.Name = "FirstApple";
a.Color = Color.Red;
Apple wa = a as Apple;
System.Diagnostics.Debug.Print("Apple name: " + wa.Name);
Run Code Online (Sandbox Code Playgroud)

我是否需要将Fruit传递给AppleCTor并手动设置名称和颜色(或1-n属性)是否有更好的设计来执行此操作?

Mar*_*ann 6

默认情况下,a实例是Fruit可转换为的实例,并且不可转换为Apple.它不是一个Apple实例,永远不会.

但是,您可以实现显式强制转换.


LBu*_*kin 5

在你的模型中,a Fruit不是Apple- 如果你想要一个Apple,实例化一个.或者,如果要创建Apple使用a Fruit作为起点,请为其创建一个Apple可以接受a 的构造函数Fruit.

您应该注意,继承层次结构中的中间类可实例化(非抽象)的对象模型通常是个坏主意.在某些情况下,这种等级可能是合适的 - 但我发现一般来说,它们比它们的价值更麻烦.好好的想清楚是否都Fruit Apple需要是具体的和实例化.