Der wesentlichste Unterschied zwischen Klasse und Struct besteht darin, dass Klasse ein Referenztyp ist, während Struct ein Wertetyp ist und ihre Zuteilung im Speicher unterschiedlich ist.
Was ist Klasse?
Klasse, ein grundlegendes Konzept in der objektorientierten Programmierung, ist eine Art benutzerdefinierter Datenstruktur, die typischerweise Felder, Attribute, Methoden, Attribute, Konstruktoren, Indexierer, Operatoren usw. enthält. In .NET erben letztlich alle Klassen von der System.Object-Klasse, sie sind also ein Referenztyp, das heißt, wenn man eine Instanz einer Klasse kennt, wird die Adresse dieser Instanz im verwalteten Heap auf dem Stack gespeichert und der Wert der Instanz im verwalteten Heap.
Was ist ein Struct?
Eine Struktur ist ein Werttyp, der verwendet wird, um eine Menge verwandter Variablen zu einer einzigen Variablenentität zu organisieren. Alle Strukturen werden von der System.ValueType-Klasse übernommen, also sind sie ein Werttyp, d. h. die Strukturinstanz wird auf dem Stack erstellt, in dem der Thread zugewiesen ist, und speichert den Wert selbst. Wenn wir also Struct verwenden, können wir sie als Basis-Typklasse wie int und char behandeln.
1. klasse ist der Referenztyp, und structs ist der Werttyp
Da die Klasse ein Referenztyp ist, kann die Klasse auf null gesetzt werden. Aber wir können Struct nicht null machen, weil es ein Werttyp ist.
2. Wenn du eine Klasse instanziierst, wird sie auf dem Heap erstellt. Und du instanziierst eine Struktur, die auf dem Stack erstellt wird
3. Du verwendest eine Referenz auf eine Klasseninstanz. Und du benutzt keine Referenz auf eine Struktur. (benutze sie stattdessen direkt)
4. Wenn wir die Klasse als Argument an eine Methode weitergeben, geben wir eine Referenz weiter. Struct übergibt einen Wert, keine Referenz.
5. Strukturen können keine Initialisierer haben, Klassen können Initialisierer haben.
6. Klassen können offensichtliche parameterlose Konstruktoren haben, aber Structs nicht
7. Das neue Schlüsselwort muss instanziiert werden, bevor die Klasse verwendet wird, und die Struct benötigt es nicht
8. Klasse unterstützt Vererbung und Polymorphie, Struct nicht. Hinweis: Aber Struct kann Schnittstellen genau wie Klassen implementieren
9. Da Struct keine Vererbung unterstützt, können seine Mitglieder nicht mit geschützten oder geschützten Internen modifiziert werden
10. Der Konstruktor von Klasse muss nicht alle Felder initialisieren, und der Konstruktør von Struct muss alle Felder initialisieren
11. Klasse kann einen Destruktor definieren, Struct jedoch nicht
12. Klasse ist für große und komplexe Daten geeignet, und Struct eignet sich für neue Typen, die oft als Kombination einiger Daten verwendet werden.
Anwendbare Fälle: Struct hat Leistungsvorteile, und Class bietet objektorientierte Erweiterungsvorteile.
Der für den zugrundeliegenden Datenspeicher verwendete Typ ist als Struct-Typ konzipiert, und der Typ, der zur Definition des Anwendungsverhaltens verwendet wird, ist als Klasse konzipiert. Wenn Sie sich über die zukünftige Anwendung des Typs unsicher sind, sollten Sie Klasse verwenden. |