C# - 如何将对象复制/创建为后代

Vac*_*ano 4 c# inheritance .net-3.5

通过示例更容易解释.鉴于这两个类:

public class MyClassA
{
    public String Property_A { get; set; }
    public String Property_B { get; set; }
    public String Property_C { get; set; }
    public String Property_D { get; set; }
    ...
    public String Property_Y { get; set; }
}

public class MyClassB: MyClassA
{
    public String Property_Z { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

假设我已经完全创建了MyClassA的实例(填充了A - Y中的所有属性).然后我需要创建一个MyClassB的实例,它与我的MyClassA实例完全相同,但填入了Property_Z(当然是自定义值).我怎样才能做到这一点?

这样做不起作用(抛出和无效的强制转换异常):

MyClassB myInstanceB = (myClassB) myInstanceA;
myInstance.Property_Z = myCustomValue;
Run Code Online (Sandbox Code Playgroud)

自从我的C++时代以来,我不需要做任何这样的事情而且我很难过.

有任何想法吗?


更新:我找到了解决我如何创建实例的问题.它在下面.我没有把它标记为答案,因为它不完全适合我的问题.

Aar*_*ght 5

你创建的实例是一个MyClassA.那是它的运行时类型,而不是MyClassB.您无法在运行时将MyClassA实例强制转换为实例,MyClassB因为它MyClassB是一种更具体的类型MyClassA.

你需要创建一个全新的实例MyClassB.清理它的一种方法是创建一个构造函数MyClassA,例如

public class MyClassB : MyClassA
{
    public MyClassB(MyClassA a, string z)
    {
        this.PropertyA = a.PropertyA;
        this.PropertyB = a.PropertyB;
        // etc.
        this.PropertyZ = z;
    }

    public string PropertyZ { get; set; }
}
Run Code Online (Sandbox Code Playgroud)