【发布时间】:2011-12-25 22:28:28
【问题描述】:
我有一个基类
public class A
{
public string s1;
public string s2;
}
我也有一个派生类:
public class B : A
{
public string s3;
}
假设我的程序创建了一个类 A 的实例。
A aClassInstance = new A();
设置了一些参数:
aClassInstance.s1 = "string 1";
aClassInstance.s2 = "string 2";
此时我想创建一个 B 类的实例。但我希望 B 已经拥有我的 A 类实例的值。
这不起作用:
public B bClassInstance = new B():
bClassInstance = (B)aClassInstance;
没有这样做:
在 A 类中创建了一个克隆方法。
public B cloneA() {
A a = new A();
a = (A)this.MemberwiseClone()
return(B)a;
}
VS 代码采用上述两种方式 - 但我遇到运行时错误
请帮忙
【问题讨论】:
-
克隆时要小心——特别是如果你的类有可变引用类型的字段。决定是要深度克隆还是浅层克隆,并记录下来。
-
正确。这个特定的类没有引用,所以浅克隆适用于它。我在这里为任何感兴趣的人找到了一篇关于浅克隆与深度克隆的好帖子:itpksingh.blogspot.com/2009/08/…
-
找到了使用 ValueInjector 的解决方案。 StackOverFlow 还不允许我“回答我自己的问题”。一旦完成,将发布完整的详细信息。
标签: c# inheritance polymorphism