Sie können keinen leeren Konstruktor oder irgendeinen Typ von Konstruktor für abgeleitete Typen erzwingen.
Konstruktoren werden nicht vererbt, sondern aufgerufen.
Wenn Sie nicht zum Basiskonstruktor verketten (mit der : base()
-Syntax), wird der Standardbasiskonstruktor implizit aufgerufen.
Von Verwenden von Konstruktoren auf MSDN:
Wenn in einer abgeleiteten Klasse ein Basisklassenkonstruktor nicht explizit mit dem Basisschlüsselwort aufgerufen wird, wird der Standardkonstruktor, falls vorhanden, implizit aufgerufen.
Sie können sicherstellen, dass die Klasse Konstruktor ohne Argumente hat, indem Sie die generische Einschränkung where T : new()
angeben. Es betrifft jedoch nur den Typ T
. Containing-Klasse ist davon nicht betroffen, also können Sie sicherstellen, dass ActionType
in Ihrem Fall den Konstruktor hat, aber Sie können es nicht für jede Klasse erzwingen, die von APlugin<T>
erbt.
Ziemlich spät, aber ich denke, das ist es wert zu wissen ..
Sie können Konstruktoren mit 0 Parametern für nicht abstrakte Klassen erzwingen. Dies ist eine Typbeschränkung, die immer dann verwendet wird, wenn Sie diese Einschränkungen für eine Klassenstruktur erzwingen möchten. Sie müssen den Typ angeben, der die Schnittstelle implementiert, die möglicherweise als störend empfunden wird. Das ist der Preis, wenn Sie eine saubere Art Sicherheit wollen.
%Vor%zum Beispiel eine Singleton-Struktur
%Vor%Tags und Links c# inheritance generics