Ich habe eine DDD-Typ-Lösung mit "Domain-Modell" -Klassen, die unter Verwendung einer "DTO" -Klasse (d. H. Rohdaten aus DB) konstruiert werden.Wenn die abstrakte Basisklasse einen parametrisierten Konstruktor enthält (und abgeleitet nicht), warum kann er nicht verwendet werden?
Die Domänenmodellklassen erben alle von einer abstrakten Basisklasse, die zum generischen Injizieren/Abrufen der DTO-Daten dienen soll. Hier ist ein Beispiel:
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);
//}
}
Ich dachte (weil DomainModelBase eine parametrisierte Konstruktor enthält) ich, dies zu tun wäre in der Lage:
var data = new AttributeOptionData();
var model = new AttributeOption(data);
jedoch der Compiler sagt „Constructor 'AttributeOption' hat null Parameter , wird aber mit einem Argument aufgerufen ". Die einzige Möglichkeit, es zum Laufen zu bringen, scheint darin zu bestehen, einen parametrisierten Konstruktor in der abgeleiteten Klasse zu erzeugen (wie die oben genannte auskommentierte).
Gibt es eine Möglichkeit, dies durch Ändern der Basisklasse, d. H. Ohne die Arbeit parametrisierten Konstruktoren in jeder abgeleiteten Klasse einrichten zu machen?
Konstruktoren werden nicht vererbt. Siehe das markierte Duplikat für Stack Overflow-Zitat und natürlich die C# -Dokumentation und die Spezifikation für offizielle Zitate. Dies wird in den Sprachhandbüchern, Referenzen usw. deutlich beschrieben. –