Sobes.tech
Junior

Was ist der Unterschied zwischen Referenztypen (Reference Type) und Wertetypen (Value Type) in C#?

sobes.tech KI

Antwort von AI

Referenztypen speichern die Adresse im Speicher, an der die Daten liegen. Werttypen speichern die Daten selbst direkt in der Variablen.

Referenztypen:

  • Erben von System.Object.
  • Werden im Heap (Speicherbereich) abgelegt.
  • Beim Zuweisen einer Referenztyp-Variable an eine andere wird die Referenz auf die Daten kopiert, nicht die Daten selbst.
  • Standardmäßig werden sie mit null initialisiert.
  • Einschließlich Klassen (class), Schnittstellen (interface), Delegaten (delegate), Arrays (array), Strings (string).

Werttypen:

  • Erben von System.ValueType (welcher wiederum von System.Object erbt).
  • Werden im Stack oder innerhalb eines Objekts abgelegt, wenn sie Felder eines Referenztyps sind.
  • Beim Zuweisen einer Werttyp-Variable an eine andere werden die Daten kopiert.
  • Standardmäßig werden sie mit dem Nullwert initialisiert (0 für Zahlen, false für bool, leerer Wert für struct).
  • Einschließlich Strukturen (struct), Enumerationen (enum), eingebettete Datentypen (int, float, bool usw.).

Beispiel:

// Referenztyp
public class MyClass
{
    public int Value;
}

// Werttyp
public struct MyStruct
{
    public int Value;
}

// Verwendung
MyClass obj1 = new MyClass { Value = 10 };
MyClass obj2 = obj1; // obj2 und obj1 verweisen auf dasselbe Objekt im Heap
obj2.Value = 20; // Änderung über obj2 wirkt sich auf obj1 aus
Console.WriteLine(obj1.Value); // Gibt 20 aus

MyStruct s1 = new MyStruct { Value = 10 };
MyStruct s2 = s1; // Daten werden kopiert, s2 ist eine unabhängige Kopie
s2.Value = 20; // Änderung über s2 wirkt sich nicht auf s1 aus
Console.WriteLine(s1.Value); // Gibt 10 aus