Ich versuche, eine Klasse erben von einer abstrakten Klasse mit einer generischen Eigenschaft darin. Ich denke, ich vermisse etwas wirklich Wichtiges. Der einzige Weg, wie ich diesen Fehler loswerden kann, ist, den Konstruktor in der Basisklasse loszuwerden. Aber wenn ich das täte, würde meine Klasse keinen Sinn haben.Vererbung von generische Klasse mit abstrakten Eigenschaft
Fehler
Fehler CS7036 Es gibt kein Argument gegeben, die erforderlichen formalen Parameter 'propA' ...
Base Class
public abstract class BaseClass<T> where T:class
{
public string propA{ get; set; }
public int propB{ get; set; }
public IEnumerable<T> propC { get; set; }
public BaseClass(string propA, int propB, IEnumerable<T> propC)
{
this.propA = propA;
this.propB = spropB;
this.propC = propC;
}
public abstract IEnumerable<T> Method1();
public abstract string Method2();
public abstract void Method3();
}
entspricht zum
Abgeleitete Klasse
public class DerivedClass: BaseClass<SomeClass>
{
public override IEnumerable<SomeClass> Method1()
{
//Code Here
}
public override string GetDefaultSortField()
{
//Code Here
}
public override void SetSortParams()
{
//Code Here
}
}
Vielleicht anstelle der abstrakten Basisklasse sollten Sie Schnittstelle verwenden (z. B. 'IBaseClass'). Dann können Sie Konstrukteure basierend auf Ihren Anforderungen entwerfen. –
Jure
Dies hat nichts mit abstrakten Klassen oder Generika zu tun - es ist einfach eine Frage eines Standardkonstruktors in einer abgeleiteten Klasse, der einen Konstruktor in der Basisklasse aufruft und keine Argumente übergibt. Ihre Basisklasse könnte konkret und nicht-generisch sein und Sie hätten immer noch das gleiche Problem. Was möchten Sie tun, wenn Sie 'new DerivedClass()' aufrufen? Erwarten Sie, dass der Drei-Parameter-Konstruktor in 'BaseClass' aufgerufen wird, und wenn ja, welche Argumente erwarten Sie, dass er an ihn übergeben wird? –
Mit VS2015 hilft Ihnen F10 auch bei der automatischen Erstellung dieses abgeleiteten Konstruktors. –