Sie sollten die folgenden Überlegungen zu Strukturen treffen:
Equals
und GetHashCode
sollten für eine bessere Leistung überschrieben werden IEquatable<T>
Schnittstelle wird empfohlen ==
und die !=
-Operatoren werden ebenfalls empfohlen Ich definiere fast nie benutzerdefinierte Strukturen. Es gibt einfach nicht so viele natürliche Werttypen, IMO.
Insbesondere würde ich sehr, sehr sorgfältig überlegen, bevor ich eine veränderbare Struktur definiere, besonders wenn sie über eine Schnittstellenimplementierung mutiert. Veränderliche Strukturen verhalten sich auf eine Weise, die die Leute gar nicht erwarten, was zu einem Code führt, der schwer zu verstehen ist.
Ich denke, es lohnt sich, "Auswählen zwischen Klassen und Strukturen" von "Design-Richtlinien für die Entwicklung von Klassenbibliotheken" .
Insbesondere:
Definieren Sie keine Struktur, es sei denn, die Typ hat alle folgenden Eigenschaften Eigenschaften:
Es stellt logisch eine einzelne dar Wert, ähnlich wie bei primitiven Typen (Integer, Double und so weiter).
Es hat eine Instanzgröße kleiner als 16 Bytes.
Es ist unveränderlich.
Es muss nicht häufig eingerahmt werden.
Entwickeln Sie wirklich Typen mit all diesen Eigenschaften häufig?
Ich denke, Hauptzweck einer Struktur - nur variable Typen zu halten. Wenn Sie einige Klassen in struct behalten - Sie liegen falsch.
Stellen Sie sich die folgenden Fragen zu dem Datensatz, den Sie mit einer Struktur modellieren:
Ich denke, wenn Sie all diese Fragen mit "Nein" beantworten können, gibt es keinen guten Grund, keine Struktur zu verwenden. Ich denke, dass Leute statische Unterklassen in bestimmten Situationen verwenden, in denen eine Struktur mehr als gut genug wäre.
Eine Klasse ist viel einfacher zu implementieren als eine Struktur. Wenn Sie eine Struktur falsch implementieren, kann es einige unerwartete Fehler geben.
Eine Struktur sollte nicht größer als 16 Byte sein, oder Sie verlieren die meisten Leistungsvorteile.
Eine Struktur soll ein Werttyp sein, der eine einzelne Entität irgendeiner Art darstellt.
Eine Struktur sollte unveränderlich sein. Das bedeutet, dass Sie niemals eine der Eigenschaften in einer Struktur ändern. Wenn Sie einen anderen Strukturwert haben möchten, erstellen Sie einen neuen Wert.
Die Verwendung von Strukturen sollte begrenzt sein, wenn Sie nur eine kleine Datenstruktur benötigen. (Wie du liest). Ich würde sie nur für die kleinsten Datenstrukturen wie Koordinaten, Offsets und manchmal für Grafiken verwenden.
In vielerlei Hinsicht können Sie sich Strukturen in C # als verkleinerte Klassen vorstellen. Sie sind im Grunde die gleichen wie Klassen, aber eher für Fälle, in denen Sie einfach einige Daten zusammen gruppieren möchten. Sie unterscheiden sich von Klassen wie folgt: Einige Dinge, die Sie beachten sollten
Tags und Links c# data-structures