【问题标题】:How can I initialize an instance of a derived class from an instance of the base class?如何从基类的实例初始化派生类的实例?
【发布时间】:2016-01-27 07:18:56
【问题描述】:

我查看了 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;

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

【问题讨论】:

    标签: c# inheritance


    【解决方案1】:

    不,这是不可能的。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这不起作用,因为当您不知道T 时,您无法设置派生类的属性。也就是说,在这个方法中只能设置基类的属性。
      猜你喜欢
      • 1970-01-01
      • 2015-06-19
      • 2013-05-20
      • 2014-09-29
      • 2013-02-12
      • 1970-01-01
      • 2022-12-03
      • 2013-10-15
      • 2019-03-02
      相关资源
      最近更新 更多