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

本文关键字:实例 派生 初始化 基类 | 更新日期: 2023-09-27 18:32:13

我看过如何从基类的实例创建派生类的实例并包含私有字段? 和 从基类创建派生类的实例,但要么我没有得到它,要么它们不是我想要的。

我有一个类,派生自另一个类,也实现了一个特定的接口:

public class DerivedClass : BaseClass, IDerivedClass

BaseClass实现IBaseClassIDerivedClass继承IBaseClass

有时,我希望能够初始化派生类,当我已经有基类的实例时。我可以创建一个构造函数,该构造函数只是将每个属性从基的实例复制到派生类实例的属性,但是有没有另一种方法?大致如下:

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

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

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

不,这是不可能的。

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

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

该语言不支持它。你能做的最好的事情就是自己在BaseClass中编写一个通用的复制方法

public T Copy<T>()
    where T : BaseClass, new()
{
    var copy = new T();
    // set all properties
    return T;
}