Freigeben über


Strukturentwurf

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.

Der allgemeine Werttyp wird am häufigsten als Struktur bezeichnet, dessen C#-Schlüsselwort. Dieser Abschnitt enthält Richtlinien für den allgemeinen Strukturentwurf.

❌ Vermeiden Sie einen parameterlosen Konstruktor für eine Struktur bereitzustellen.

Nach dieser Richtlinie können Arrays von Strukturen erstellt werden, ohne den Konstruktor für jedes Element des Arrays ausführen zu müssen. Beachten Sie, dass C#-Strukturen keine parameterlosen Konstruktoren aufweisen dürfen.

❌ DEFINIEREN SIE KEINE veränderbaren Werttypen.

Veränderbare Werttypen haben mehrere Probleme. Wenn z. B. ein Getter für eine Eigenschaft einen Werttyp zurückgibt, empfängt der Aufrufer eine Kopie. Da die Kopie implizit erstellt wird, wissen Entwickler möglicherweise nicht, dass sie die Kopie verändern und nicht den ursprünglichen Wert. Außerdem treten in einigen Sprachen (insbesondere dynamischen Sprachen) Probleme bei der Verwendung änderbarer Werttypen auf, da bei der Dereferenzierung auch lokale Variablen verursachen, dass eine Kopie erstellt wird.

✔️ Stellen Sie sicher, dass ein Zustand, in dem alle Instanzdaten auf null, false oder Null (jeweils passend) festgelegt sind, gültig ist.

Dadurch wird die versehentliche Erstellung ungültiger Instanzen verhindert, wenn ein Array der Strukturen erstellt wird.

✔️ IMPLEMENTIEREN sie IEquatable<T> für Werttypen.

Die Object.Equals-Methode für Werttypen bewirkt Boxing, und ihre Standardimplementierung ist nicht sehr effizient, da sie Reflexion verwendet. Equals kann eine viel bessere Leistung aufweisen und so implementiert werden, dass kein Boxing ausgelöst wird.

❌ Erweitern Sie ValueType NICHT explizit. In der Tat verhindern die meisten Sprachen dies.

Im Allgemeinen können Strukturen sehr nützlich sein, sollten aber nur für kleine, einzelne, unveränderliche Werte verwendet werden, für die nicht oft Boxing durchgeführt wird.

© 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.

Siehe auch