338 Stimmen

Wann sollte ich eine Struktur anstelle einer Klasse verwenden?

MSDN sagt, dass Sie structs verwenden sollten, wenn Sie leichtgewichtige Objekte benötigen. Gibt es noch andere Szenarien, in denen eine Struktur einer Klasse vorzuziehen ist?

Manche Leute haben das vielleicht vergessen:

  1. Strukturen können Methoden haben.
  2. Strukturen kann nicht vererbt werden.

Ich verstehe die technischen Unterschiede zwischen Structs und Klassen, ich habe nur kein gutes Gefühl für wenn um eine Struktur zu verwenden.

4voto

Abhishek kumar Punkte 11

Erwägen Sie die Definition einer Struktur anstelle einer Klasse, wenn die Instanzen des Typs klein und in der Regel kurzlebig sind oder häufig in andere Objekte eingebettet werden.

3voto

Jim Deville Punkte 10422

Wenn Sie zwar kein Verhalten, aber mehr Struktur als ein einfaches Array oder Wörterbuch benötigen.

Weiterverfolgung So denke ich über Strukturen im Allgemeinen. Ich weiß, dass sie Methoden haben können, aber ich möchte diese allgemeine mentale Unterscheidung beibehalten.

3voto

Scott Dorman Punkte 41206

Wie @Simon sagte, bieten Structs eine "wertartige" Semantik. Wenn Sie also ein ähnliches Verhalten wie bei einem eingebauten Datentyp benötigen, verwenden Sie ein Struct. Da Structs per Kopie übergeben werden, sollten Sie sicherstellen, dass sie eine geringe Größe haben, etwa 16 Byte.

2voto

Hmm ...

Ich würde die Garbage Collection nicht als Argument für/gegen die Verwendung von Structs gegenüber Klassen verwenden. Der verwaltete Heap funktioniert ähnlich wie ein Stack - das Erstellen eines Objekts setzt es einfach an den Anfang des Heaps, was fast so schnell ist wie die Zuweisung auf dem Stack. Wenn ein Objekt kurzlebig ist und einen GC-Zyklus nicht überlebt, ist die Deallokation außerdem kostenlos, da der GC nur mit Speicher arbeitet, der noch zugänglich ist. (Suchen Sie auf MSDN, es gibt eine Reihe von Artikeln über die .NET-Speicherverwaltung, ich bin nur zu faul, sie zu suchen).

Wenn ich eine Struktur verwende, ärgere ich mich meistens darüber, dass ich das getan habe, weil ich später feststelle, dass eine Referenzsemantik die Dinge etwas einfacher gemacht hätte.

Wie auch immer, die vier Punkte im oben genannten MSDN-Artikel scheinen ein guter Leitfaden zu sein.

2voto

Jack Punkte 11

Structs sind auf dem Stack, nicht der Heap, so dass Sie Thread-sicher sind, und sollte verwendet werden, wenn die Implementierung der Transfer-Objekt-Muster, Sie wollen nie Objekte auf dem Heap verwenden Sie sind flüchtig, Sie wollen in diesem Fall den Call Stack verwenden, dies ist ein grundlegender Fall für die Verwendung eines struct Ich bin überrascht von allen Weg aus Antworten hier,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X