如何从基类的实例初始化派生类的实例
本文关键字:实例 派生 初始化 基类 | 更新日期: 2023-09-27 18:32:13
我看过如何从基类的实例创建派生类的实例并包含私有字段? 和 从基类创建派生类的实例,但要么我没有得到它,要么它们不是我想要的。
我有一个类,派生自另一个类,也实现了一个特定的接口:
public class DerivedClass : BaseClass, IDerivedClass
BaseClass
实现IBaseClass
,IDerivedClass
继承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;
}