-4
我有一个使用“DTO”类(即来自DB的原始数据)构建的“域模型”类的DDD类型解决方案。如果抽象基类包含参数化构造函数(并且派生不),为什么不能使用它?
域模型类都从一个抽象基类继承,它旨在提供泛型注入/检索DTO数据。下面是一个示例:
public abstract class DomainModelBase<T> where T : IDto, new()
{
protected T _data;
protected DomainModelBase()
{
_data = new T();
}
protected DomainModelBase(T data)
{
_data = data;
}
protected void SetData(T data)
{
_data = data;
}
public T GetData()
{
return _data;
}
}
public class AttributeOption : DomainModelBase<AttributeOptionData>
{
//public AttributeOption(AttributeOptionData data)
//{
// SetData(data);
//}
}
我认为(因为DomainModelBase包含一个参数化的构造函数),我将能够做到这一点:
var data = new AttributeOptionData();
var model = new AttributeOption(data);
然而,编译器说:“构造‘AttributeOption’具有零个参数,但用一个参数调用“。使其工作的唯一方法似乎是在派生类中创建一个参数化的构造函数(如上面注释过的那样)。
有没有办法通过修改基类来完成这项工作,即不需要在每个派生类中设置参数化构造函数?
构造函数不被继承。请参阅Stack Overflow引用的标记副本,当然还有官方引用的C#文档和规范。这在语言手册,参考文献等中有明确的描述。 –