Strukturentwurf

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.

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

❌ Stellen Sie KEINEN parameterlosen Konstruktor für eine Struktur zur Verfügung.

Wenn Sie diese Richtlinie befolgen, können Sie Arrays von Strukturen erstellen, ohne dass der Konstruktor für jedes Element des Arrays ausgeführt werden muss. Beachten Sie, dass C# keine Strukturen mit parameterlosen Konstruktoren zulässt.

❌ Definieren Sie KEINE änderbaren Werttypen.

Mit änderbaren Werttypen sind verschiedene Probleme verbunden. 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 und nicht den ursprünglichen Wert mutieren. 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 (0), FALSE oder NULL (nach Bedarf) festgelegt sind, gültig ist.

Dies verhindert, dass versehentlich ungültige Instanzen erstellt werden, 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 den meisten Sprachen wird dies ohnehin verhindert.

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

Weitere Informationen