Dies ist eine Syntaxfrage. Ich habe eine generische Klasse, die von einer generischen Basisklasse erbt und eine Einschränkung auf einen der Typparameter anwendet. Ich möchte auch, dass die abgeleitete Klasse eine Schnittstelle implementiert. Für mein Leben kann ich anscheinend nicht die richtige Syntax herausfinden.
Das habe ich:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
Das erste, was mir in den Sinn kam, war Folgendes:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Dies ist jedoch falsch, da T2 sowohl IBar als auch IFoo implementieren muss und nicht DerivedFoo, um IFoo zu implementieren.
Ich habe ein bisschen googeln versucht, Doppelpunkte, Semikolons usw. verwendet, aber ich bin kurz aufgetaucht. Ich bin sicher, die Antwort ist einfach.
c#
generics
inheritance
interface
constraints
Dan Rigby
quelle
quelle
Antworten:
Sie fügen die gesamte Signatur Ihrer Klasse ein, bevor Sie allgemeine Einschränkungen definieren.
quelle
where T2 : IBar, IFoo
bedeutet nur, dassT2
beide Schnittstellen implementiert werden müssen, anstatt zuDerivedFoo<T1,T2>
implementierenIFoo
Meine Empfehlung: Wenn Sie eine Frage zur Syntax der C # -Sprache haben, lesen Sie die Spezifikation. Deshalb veröffentlichen wir es. Sie sollten Abschnitt 10.1 lesen.
Um Ihre spezifische Frage zu beantworten, lautet die Reihenfolge der Dinge in einer Klassendeklaration:
Alles in dieser Liste ist optional, außer "Klasse", dem Namen und dem Textkörper, aber alles muss in dieser Reihenfolge erscheinen, wenn es erscheint.
quelle
quelle
Dies ist eine Erweiterung der vorhandenen Antworten. Der Standardwert ist,
string
wenn Sie keinen Typ angeben . Ich habe keine Schnittstelle implementiert, aber das sollte nichts anderes als gewöhnlich erfordern.quelle