C# LanguageWerttyp vs. Referenztyp

Syntax

  • Übergeben als Referenz: public void Double (ref int numberToDouble) {}

Bemerkungen

Einführung

Werttypen

Werttypen sind die einfachere der beiden. Werttypen werden häufig verwendet, um Daten selbst darzustellen. Eine Ganzzahl, ein Boolean oder ein Punkt im 3D-Raum sind Beispiele für gute Werttypen.

Werttypen (Strukturen) werden mit dem Schlüsselwort struct deklariert. Ein Beispiel zur Deklaration einer neuen Struktur finden Sie im Abschnitt zur Syntax.

Im Allgemeinen verfügen wir über 2 Schlüsselwörter, mit denen Werttypen deklariert werden:

  • Structs
  • Aufzählungen

Referenztypen

Referenztypen sind etwas komplexer. Referenztypen sind traditionelle Objekte im Sinne der objektorientierten Programmierung. Sie unterstützen also die Vererbung (und deren Vorteile) und unterstützen Finalisierer.

In C # haben wir im Allgemeinen folgende Referenztypen:

  • Klassen
  • Delegierte
  • Schnittstellen

Neue Referenztypen (Klassen) werden mit dem Schlüsselwort class deklariert. Ein Beispiel finden Sie im Abschnitt zur Syntax, wie Sie einen neuen Referenztyp deklarieren.

Hauptunterschiede

Die wichtigsten Unterschiede zwischen Referenztypen und Werttypen sind unten zu sehen.

Werttypen sind auf dem Stack vorhanden, Referenztypen auf dem Heap

Dies ist der oft erwähnte Unterschied zwischen den beiden, aber eigentlich geht es darum, dass das Programm bei Verwendung eines Werttyps in C # wie einem int diese Variable verwendet, um sich direkt auf diesen Wert zu beziehen. Wenn Sie int mein = 0 sagen, bezieht sich die Variable mein direkt auf 0, was effizient ist. Referenztypen enthalten jedoch tatsächlich (wie der Name schon sagt) einen Verweis auf das zugrunde liegende Objekt. Dies ist vergleichbar mit Zeigern in anderen Sprachen wie C ++.

Sie werden die Auswirkungen möglicherweise nicht sofort bemerken, aber die Auswirkungen sind vorhanden, sind mächtig und subtil. Ein Beispiel finden Sie im Beispiel zum Ändern von Referenztypen an anderer Stelle.

Dieser Unterschied ist der Hauptgrund für die folgenden anderen Unterschiede und ist wissenswert.

Werttypen ändern sich nicht, wenn Sie sie in einer Methode ändern, Referenztypen

Wenn ein Werttyp als Parameter an eine Methode übergeben wird, ändert sich der Wert in keiner Weise durch die Methode. Der Wert wird jedoch nicht geändert. Wenn Sie jedoch einen Referenztyp an dieselbe Methode übergeben und ändern, ändert sich das zugrunde liegende Objekt Für andere Dinge, die dasselbe Objekt verwenden, wird das neu geänderte Objekt anstelle des ursprünglichen Werts angezeigt.

Weitere Informationen finden Sie im Beispiel für Werttypen und Referenztypen in Methoden.

Was ist, wenn ich sie ändern möchte?

Übergeben Sie sie einfach mit dem Schlüsselwort "ref" an Ihre Methode, und Sie übergeben dieses Objekt als Referenz. Das heißt, es ist das gleiche Objekt im Gedächtnis. Die von Ihnen vorgenommenen Änderungen werden daher respektiert. Ein Beispiel finden Sie im Beispiel zur Referenzübergabe.

Werttypen können nicht null sein, Referenztypen können dies tun

So wie es heißt, können Sie einem Referenztyp den Wert null zuweisen. Dies bedeutet, dass der Variablen, die Sie zugewiesen haben, kein Objekt zugewiesen werden kann. Bei Werttypen ist dies jedoch nicht möglich. Sie können jedoch Nullable verwenden, um zuzulassen, dass Ihr Werttyp auf Null gesetzt werden kann. Wenn dies eine Anforderung ist, sollten Sie jedoch bei starkem Nachdenken stark darüber nachdenken, ob eine Klasse hier möglicherweise nicht der beste Ansatz ist, wenn es Ihre eigene ist Art.

Werttyp vs. Referenztyp Verwandte Beispiele