2017-12-01 1 views
1

Ich verstehe, dass Werttypen Werte direkt (int, Bool, etc.) enthalten, während Referenztypen (wie Klassen) Referenzen enthalten, wo die Werte gespeichert sind. Ich habe noch keine Antwort auf diese spezielle Frage in anderen Posts zu Referenz- und Werttypen gefunden.Würde eine int-Variable, die eine andere int-Variable enthält, als Referenztyp betrachtet?

int x = 10; 
int y = x; 

// Would y be considered a reference type? 

Ich frage dies, weil während „int x“ ist ein Werttyp, „y“ hält keinen Wert direkt, sondern „Referenzen“ auf „x“ (eine andere Stelle im Speicher).

+2

'y' * hält * einen Wert - Sie haben ihn nur indirekt zugewiesen. Ein Integer-Typ kann nur ganzzahlige Werte enthalten. Now * eine andere int-Variable * – Plutonix

Antwort

1

Wird y als Referenztyp betrachtet?

No.

Referenztyp vs. Werttyp ist eine Eigenschaft des Typ selbst, keine der Variablen dieses Typs. Typ int ist ein Werttyp; Daher sind alle Variablen vom Typ int Variablen eines Werttyps.

In Ihrem speziellen Szenario einmal y den Wert x zugeordnet ist, wird es ein dieser Wert zu kopieren, keinen Hinweis auf mich. Die Werte x und y können unabhängig voneinander vergeben werden. Wenn Sie anschließend x ändern, würde der Wert von y unverändert bleiben:

int x = 10; 
int y = x; 
x = 5; 
Console.WriteLine(y); // Prints 10 

Im Gegensatz dazu Variablen Referenztyp „Spur“ Änderungen an dem Objekt, das sie verweisen:

StringBuilder x = new StringBuilder("Hello"); 
StringBuilder y = x; 
x.Append(", world"); 
Console.WriteLine(y); // Prints "Hello, world" 
1

Ich frage denn "int x" ist ein Werttyp, "y" enthält keinen Wert direkt, sondern "verweist" auf "x" (eine andere Stelle im Speicher).

y bezieht sich nicht auf x. Für Werte bedeutet die Zuweisung (über den Operator =) Kopieren den Wert von der Variablen auf der rechten Seite auf die Variable auf der linken Seite.

Für Referenz Typen, bedeutet dies die Referenz zu kopieren.

Verwandte Themen