我看过How can I create an instance of a derived class from an instance of a base class and include private fields?和Create an instance of derived class from the base class,但要么我没有得到它,要么它们不是我想要的。
我有一个派生自另一个的类,也实现了一个特定的接口:
public class DerivedClass : BaseClass, IDerivedClass
BaseClass
实施IBaseClass
,IDerivedClass
继承IBaseClass
。
有时,当我已经拥有基类的实例时,我希望能够初始化派生类。我可以创建一个构造函数,只是简单地将基础实例中的每个属性复制到派生类实例的属性,但还有另一种方法吗?有点像:
BaseClass bc = new BaseClass();
DerivedClass dc = new DerivedClass() : bc;
这可行吗?如果没有,为什么不呢?我准备接受这可能是不可能的,但如果是的话,如果有人能解释原因,我会很感兴趣。
答案 0 :(得分:0)
不,这是不可能的。
您必须创建另一个对象,因为它必须具有第二个对象的特征。你不能只把一个复制到另一个。如果允许,可能会出现状态无效的对象。
最好的办法是创建一个'复制构造函数',正如您已经提到的那样。
答案 1 :(得分:0)
语言不支持。
您可以做的最好的事情是在BaseClass
public T Copy<T>()
where T : BaseClass, new()
{
var copy = new T();
// set all properties
return T;
}