Kann ich Nachkommen zwingen, einen parameterlosen Konstruktor zu haben?

8

Ich versuche, einen generischen Fabrikmuster-ähnlichen Mechanismus zu erstellen.

Die Fabrik wird wie folgt aussehen:

%Vor%

Nachkommen von IAction können den parameterlosen Konstruktor verbergen und dies führt zum Fehlschlagen der Factory.

    
Odys 26.12.2011, 17:32
quelle

3 Antworten

8

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.

    
Oded 26.12.2011, 17:33
quelle
9

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.

    
MagnatLU 26.12.2011 17:34
quelle
0

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%     
Joshua 30.08.2016 05:48
quelle

Tags und Links