Geschachtelte Typen
Hinweis
Diese Inhalte wurden mit Genehmigung von Pearson Education, Inc. aus Framework Design Guidelines nachgedruckt: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. 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.
Ein geschachtelter Typ ist ein Typ, der innerhalb des Gültigkeitsbereichs eines anderen Typs definiert ist, der als einschließender Typ bezeichnet wird. Ein geschachtelter Typ besitzt Zugriff auf alle Member seines einschließenden Typs. Er besitzt z. B. Zugriff auf private Felder, die im einschließenden Typ definiert sind, sowie auf geschützte Felder, die in allen Vorgängern des einschließenden Typs definiert sind.
Im Allgemeinen sollten geschachtelte Typen sparsam verwendet werden. Hierfür gibt es mehrere Gründe: Einige Entwickler sind mit dem Konzept nicht vollständig vertraut. Diese Entwickler können z. B. Probleme mit der Syntax für die Deklaration von Variablen geschachtelter Typen haben. Geschachtelte Typen sind auch sehr eng mit ihren einschließenden Typen verknüpft und daher nicht als allgemeine Typen geeignet.
Für die Modellierung von Implementierungsdetails ihrer einschließenden Typen eignen sich geschachtelte Typen am besten. Der Endbenutzer sollte nur selten Variablen eines geschachtelten Typs deklarieren müssen, und es ist fast niemals erforderlich, geschachtelte Typen explizit zu instanziieren. Beispielsweise kann der Enumerator einer Sammlung ein geschachtelter Typ dieser Sammlung sein. Enumeratoren werden in der Regel durch ihren einschließenden Typ instanziiert, und da viele Sprachen die foreach-Anweisung unterstützen, müssen Enumeratorvariablen nur selten vom Endbenutzer deklariert werden.
✔️ VERWENDEN Sie geschachtelte Typen, wenn die Beziehung zwischen dem geschachtelten Typ und seinem äußeren Typ so ist, dass Semantik für Memberzugriff wünschenswert ist.
❌ Verwenden Sie KEINE öffentlichen geschachtelten Typen als logisches Gruppierungskonstrukt. Verwenden Sie zu diesem Zweck Namespaces.
❌ VERMEIDEN Sie öffentlich verfügbar gemachte geschachtelte Typen. Die einzige Ausnahme besteht darin, wenn Variablen des geschachtelten Typs nur in seltenen Szenarien deklariert werden müssen, z. B. bei Unterklassifizierung oder anderen erweiterten Anpassungsszenarien.
❌ Verwenden Sie KEINE geschachtelten Typen, wenn auf den Typ wahrscheinlich außerhalb des enthaltenden Typs verwiesen wird.
Beispielsweise sollte eine Enumeration, die an eine Methode übergeben wird, die für eine Klasse definiert wurde, nicht als ein geschachtelter Typ in der Klasse definiert werden.
❌ Verwenden Sie KEINE geschachtelten Typen, wenn sie von Clientcode instanziiert werden müssen. Wenn ein Typ über einen öffentlichen Konstruktor verfügt, sollte er wahrscheinlich nicht geschachtelt werden.
Wenn ein Typ instanziiert werden kann, scheint das darauf hinzudeuten, dass der Typ einen eigenen Platz im Framework besitzt (Sie können ihn erstellen, mit ihm arbeiten und ihn verwerfen, ohne jemals den äußeren Typ zu verwenden). Er sollte daher nicht geschachtelt werden. Innere Typen sollten nicht in großem Umfang außerhalb des äußeren Typs ohne irgendeine Beziehung zum äußeren Typ wiederverwendet werden.
❌ Definieren Sie KEINEN geschachtelten Typ als Member einer Schnittstelle. Viele Sprachen unterstützen ein solches Konstrukt nicht.
Teile ©2005, 2009 Microsoft Corporation. Alle Rechte vorbehalten.
Nachdruck mit Genehmigung von Pearson Education, Inc aus 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 durch Addison-Wesley Professional als Teil der Microsoft Windows Development Series.