gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:12:47 28 4
gpt4 key购买 nike

这个用例子更容易解释。给定这两个类:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com