C#派生类初始化

问题描述 投票:0回答:1

我的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# initialization derived-class
1个回答
0
投票

你问的是,在C#中有没有一种简单的方法来创建一个复制构造函数。

没有,如果不在其中一个构造函数中明确指定你要复制的字段,是没有办法做到的。

请看 文件 以获取更多信息。


0
投票

我不知道有什么简单的方法可以写出全功能的 抄写员 在c#中。所以要么你在 BaseClass 手动或您可以使用 反思 来实现自动化。

最后一个选择是尝试使用 自动安装程序 这将有一些限制(但对于所提供的代码应该可以工作),在它能处理的方面--只有公共属性字段将被映射,实现将像这样。

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)
    {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.