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++时代以来,我不需要做任何这样的事情而且我很难过.
有任何想法吗?
更新:我找到了解决我如何创建实例的问题.它在下面.我没有把它标记为答案,因为它不完全适合我的问题.
你创建的实例是一个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)