Ich frage mich, ob es eine Möglichkeit gibt, zu begrenzen, wer von einer Klasse erben kann.
internal
: erlaubt keine Klassen außerhalb der Assembly sealed
: Klasse kann nicht vererbt werden Gibt es ein Schlüsselwort oder eine Methode, um nur bestimmte Klassen (sagen wir nur aus dem eigenen Namespace) zu erlauben, diese Klasse zu erben?
Ich möchte auch nicht, dass diese spezielle Klasse generisch ist. Meine Sorge ist nicht Sicherheit, sondern das Design im Allgemeinen.
Beispiel was ich will:
Gibt es eine Möglichkeit, nur bestimmten Klassen zu erlauben, diese Klasse zu erben?
Ja. Wenn der erbende Code teilweise vertrauenswürdig ist , können Sie einen Vererbungsbedarf für die Basisklasse festlegen, und die Laufzeitumgebung lädt die erbende Klasse nicht, wenn sie die Bedingungen nicht erfüllt der Nachfrage:
Natürlich bedeutet vollständiges Vertrauen vollständiges Vertrauen . Voll vertrauenswürdiger Code kann erben, was er will.
Ich vermute, dass Sie versuchen, Beschränkungen aufzuerlegen, die Sie eigentlich nicht durchsetzen sollten. Kannst du beschreiben, warum du diese schwierige Sache machst? Es gibt wahrscheinlich einen besseren Weg, um zu tun, was Sie wollen.
UPDATE:
Ich versuche, die Vererbung innerhalb meiner Klassen in derselben Assembly zu begrenzen.
Dann hätten Sie das wahrscheinlich zuerst gesagt.
Machen Sie alle Konstruktoren der Klasse intern. Um von einer Klasse zu erben, muss ein barrierefreier Konstruktor vorhanden sein. Wenn Sie alle Konstruktoren intern machen, können nur Klassen in dieser Assembly von der Basisklasse erben.
Soweit ich weiß, ist die Verwendung von internal
die einzige Möglichkeit zu steuern, wer eine Klasse erben kann. Wenn sich die Vererber in einer anderen Assembly befinden müssen, können Sie Klassen einer anderen Assembly die Interna Ihrer Assembly anzeigen lassen, indem Sie InternalsVisibleTo
Attribut (die Zielbaugruppe muss signiert sein, damit dies mit signierten Baugruppen funktioniert).