如何从基类的实例初始化派生类的实例?

时间:2016-01-27 07:18:56

标签: c# inheritance

我看过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实施IBaseClassIDerivedClass继承IBaseClass

有时,当我已经拥有基类的实例时,我希望能够初始化派生类。我可以创建一个构造函数,只是简单地将基础实例中的每个属性复制到派生类实例的属性,但还有另一种方法吗?有点像:

BaseClass bc = new BaseClass();
DerivedClass dc = new DerivedClass() : bc;

这可行吗?如果没有,为什么不呢?我准备接受这可能是不可能的,但如果是的话,如果有人能解释原因,我会很感兴趣。

2 个答案:

答案 0 :(得分:0)

不,这是不可能的。

您必须创建另一个对象,因为它必须具有第二个对象的特征。你不能只把一个复制到另一个。如果允许,可能会出现状态无效的对象。

最好的办法是创建一个'复制构造函数',正如您已经提到的那样。

答案 1 :(得分:0)

语言不支持。 您可以做的最好的事情是在BaseClass

中自己编写一个通用的复制方法
public T Copy<T>()
    where T : BaseClass, new()
{
    var copy = new T();
    // set all properties
    return T;
}