Warum sollten Konstrukteure in abstrakten Klassen geschützt werden, nicht in der Öffentlichkeit?
ReSharper schlägt vor, die änderung der Zugänglichkeit des public
Konstruktor in einer abstract
Klasse protected
aber es ist nicht die Logik hinter dieser.
Können Sie etwas Licht?
InformationsquelleAutor der Frage Cristi Diaconescu | 2009-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach, weil die öffentliche macht keinen Sinn, eine abstrakte Klasse. Eine abstrakte Klasse ist per definition nicht direkt instanziert werden. Es kann nur instanziiert werden, indem eine Instanz eines abgeleiteten Typs. Deshalb sind die einzigen Arten, die Zugriff auf einen Konstruktor, sind abgeleitete Typen und daher geschützt macht viel mehr Sinn als die öffentlichen. Es genauer beschreibt die Zugänglichkeit.
InformationsquelleAutor der Antwort JaredPar
Es technisch keinen Unterschied macht, überhaupt wenn man den Konstruktor
public
stattprotected
auf eine abstrakte Klasse. Die Zugänglichkeit/Sichtbarkeit des Konstruktors ist immer noch genau das gleiche: die gleiche Klasse oder in abgeleiteten Klassen. Die zwei keywords haben nicht zu unterscheidende Effekte, die für alle Absichten und Zwecke.So, diese Wahl ist nur eine Frage des Stils: Typ
protected
zu erfüllen, die der Objekt-Orientierten versierte Leute.Reflexion wird standardmäßig nur den Konstruktor, wenn es
public
aber Sie kann nicht rufen diesen Konstruktor sowieso.IntelliSense zeigt die
public
Konstruktor bei der Eingabenew
aber Sie kann nicht rufen diesen Konstruktor sowieso.Die Metadaten der assembly wird dem Umstand Rechnung getragen werden, dass der Konstruktor ist public oder protected.
InformationsquelleAutor der Antwort Virtlink
Ist es gut OO der Praxis.
Wollen Sie nur die Erben die Kind-Klassen haben Zugriff auf den Konstruktor. Der einzige Weg dazu ist, indem der Konstruktor geschützt ist.
Halten Sie im Verstand, wenn Sie Parameter hinzufügen, diese Konstruktoren, es ist eine ganz andere Diskussion.
InformationsquelleAutor der Antwort Srikar Doddi