Middle
Können Strukturobjekte im Heap liegen?
sobes.tech KI
Antwort von AI
Ja, das können sie.
Objekte von Strukturen, die in C# Wertetypen sind, werden in der Regel auf dem Stack gespeichert. Sie können jedoch in folgenden Fällen im Heap liegen:
- Sie sind Felder von Referenztypen (Klassen). Das Klassenobjekt befindet sich im Heap, und seine Strukturfelder werden zusammen mit ihm gespeichert.
- Boxing (Boxen). Wenn ein Strukturobjekt in ein Objekt vom Typ
objectoder eine Schnittstelle umgewandelt wird, wird es in einen Referenztyp eingepackt und im Heap abgelegt. - Elemente von Arrays von Strukturen. Ein Array (das ein Referenztyp ist) wird im Heap abgelegt, und seine Strukturelemente werden im für dieses Array reservierten Speicher gespeichert.
Beispiel für Boxing:
// Das Strukturobjekt liegt auf dem Stack
int Anfangswert = 10;
// Boxing: Die Struktur wird in ein Objekt verpackt und im Heap abgelegt
object verpackterWert = Anfangswert;
// Es ist ein Cast (Unboxing) erforderlich, um mit dem Wert als int zu arbeiten
int entpackterWert = (int)verpackterWert;
Beispiel für eine Struktur als Feld einer Klasse:
// Das Klassenobjekt befindet sich im Heap
public class Container
{
// Die Struktur als Klassenfeld wird im Heap zusammen mit dem Container-Objekt gespeichert
public Punkt Koordinaten;
}
// Definition der Struktur
public struct Punkt
{
public int X;
public int Y;
}
// Erstellen eines Container-Objekts im Heap
Container c = new Container();
Beispiel für ein Array von Strukturen:
// Das Array von Punkten ist ein Referenztyp und wird im Heap abgelegt
Punkt[] punktArray = new Punkt[5];
// Die Elemente des Arrays (Strukturen Punkt) werden im für das Array reservierten Speicher im Heap gespeichert
punktArray[0] = new Punkt { X = 1, Y = 2 };