簡體   English   中英

C# 派生 class 初始化

[英]C# derived class initialization

我的 C# 代碼場景:

public class BaseClass 
{
       public int A;
       public float B;
       //a multitude of other fields
       public string Y;
};

public class DerivedClass:BaseClass {
       public string Z;
       public DerivedClass (BaseClass b) {
       //??
       }
}

我想在沒有顯式成員復制的情況下編寫這個 DerivedClass 構造函數。 在 C++ 中,默認的 BaseClass 構造函數會為我完成。 先感謝您。

您問是否有一種簡單的方法可以在 C# 中創建復制構造函數。

不,如果不明確指定要在其中一個構造函數中復制的字段,就無法做到這一點。

有關更多信息,請參閱文檔

我不知道在 c# 中編寫功能齊全的復制構造函數的簡單方法。 因此,您可以手動在BaseClass中實現它,也可以使用反射來自動化它。

最后一個選擇是嘗試使用Automapper ,它有一些限制(但對於提供的代碼應該可以工作),就它可以處理的內容而言 - 只有公共屬性/字段將被映射,實現將如下所示:

public class BaseClass
{
    private static readonly IMapper _mapper;
    static BaseClass()
    {
        var config = new MapperConfiguration(cfg => cfg.CreateMap<BaseClass, BaseClass>());
        _mapper = config.CreateMapper();
    }
    public int A;
    public float B;
    //a multitude of other fields
    public string Y;
    public BaseClass(){}
    public BaseClass(BaseClass b)
    {
        _mapper.Map<BaseClass, BaseClass>(b,this);
    }
};

public class DerivedClass : BaseClass
{
    public string Z;
    public DerivedClass(BaseClass b): base(b)
    {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM