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
nullinitialisiert. - Einschließlich Klassen (
class), Schnittstellen (interface), Delegaten (delegate), Arrays (array), Strings (string).
Werttypen:
- Erben von
System.ValueType(welcher wiederum vonSystem.Objecterbt). - 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,
falsefürbool, leerer Wert fürstruct). - 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