这个用例子更容易解释。给定这两个类:
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; }
}
假设我已经完全创建了 MyClassA 的实例(填充了 A - Y 的所有属性)。然后我需要创建一个 MyClassB 实例,它与我的 MyClassA 实例完全相同,但填充了 Property_Z(当然是自定义值)。我该怎么做?
这样做是行不通的(抛出和 Invalid Cast Exception):
MyClassB myInstanceB = (myClassB) myInstanceA;
myInstance.Property_Z = myCustomValue;
自从我使用 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; }
}
关于C# - 如何复制/创建对象作为后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2390278/