Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Dieser Inhalt wird mit Genehmigung von Pearson Education, Inc. aus Framework Design Guidelines: Konventionen, Idiome und Muster für wiederverwendbare .NET-Bibliotheken, 2. Auflage nachgedruckt. Diese Ausgabe wurde 2008 veröffentlicht, und das Buch wurde seitdem in der dritten Ausgabe vollständig überarbeitet. Einige der Informationen auf dieser Seite sind möglicherweise veraltet.
Eines der Merkmale objektorientierter Frameworks besteht darin, dass Entwickler sie auf unerwartete Weise erweitern und anpassen können, die von den Framework-Designern nicht vorhergesehen wurden. Dies ist sowohl die Kraft als auch die Gefahr des erweiterbaren Designs. Wenn Sie Ihr Framework entwerfen, ist es daher sehr wichtig, bei Bedarf sorgfältig die Erweiterbarkeit zu entwerfen und die Erweiterbarkeit zu begrenzen, wenn es gefährlich ist.
Ein leistungsstarker Mechanismus zur Verhinderung der Erweiterbarkeit ist die Versiegelung. Sie können entweder die Klasse oder einzelne Mitglieder versiegeln. Durch das Versiegeln einer Klasse wird verhindert, dass Benutzer von der Klasse erben. Das Versiegeln eines Members verhindert, dass Benutzer einen bestimmten Member überschreiben können.
❌ Versiegeln Sie Klassen nicht, ohne einen guten Grund dafür zu haben.
Das Versiegeln einer Klasse, da Sie sich kein Erweiterbarkeitsszenario vorstellen können, ist kein guter Grund. Benutzer*innen des Frameworks nutzen aus verschiedenen, nicht offensichtlichen Gründen (z. B. Hinzufügen von Convenience-Membern) gerne die Vererbung von Klassen. Beispiele für nicht offensichtliche Gründe, warum Benutzer von einem Typ erben möchten, finden Sie unter Unsealed Classes.
Gute Gründe für das Versiegeln einer Klasse sind:
Die Klasse ist eine statische Klasse. Siehe Statisches Klassendesign.
Die Klasse speichert sicherheitsrelevante Geheimnisse in geerbten geschützten Membern.
Die Klasse erbt viele virtuelle Member, und die Kosten für eine individuelle Versiegelung würden die Vorteile der nicht versiegelten Klasse überwiegen.
Die Klasse ist ein Attribut, das eine sehr schnelle Runtime-Suche erfordert. Versiegelte Attribute weisen etwas höhere Leistungsniveaus auf als nicht versiegelte Attribute. Siehe Attribute.
❌ Deklarieren Sie geschützte Member NICHT für versiegelte Typen.
Versiegelte Typen können standardmäßig nicht geerbt werden. Dies bedeutet, dass geschützte Member für versiegelte Typen nicht aufgerufen werden können und dass virtuelle Methoden für versiegelte Typen nicht überschrieben werden können.
✔️ ERWÄGEN Sie das Versiegeln von Membern, die Sie überschreiben.
Probleme, die sich aus der Einführung von virtuellen Membern ergeben können (in Virtuelle Members erläutert), gelten auch für Außerkraftsetzungen, wenn auch in einem etwas geringeren Ausmaß. Das Versiegeln einer Außerkraftsetzung schützt Sie ab diesem Punkt in der Vererbungshierarchie vor diesen Problemen.
© Teile 2005, 2009 Microsoft Corporation. Alle Rechte vorbehalten.
Nachdruck mit freundlicher Genehmigung von Pearson Education, Inc., aus dem Buch Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition von Krzysztof Cwalina und Brad Abrams, veröffentlicht am 22. Oktober 2008 von Addison-Wesley Professional als Teil der Microsoft Windows Development Series.