Middle
Szerkezeti tárgyak lehetnek a halomban?
sobes.tech MI
Válasz az MI-től
Igen, tudják.
A C#-ban érték típusú struktúrák általában a veremben tárolódnak. Azonban a következő esetekben a heap-en helyezkedhetnek el:
- Referenciatípusú mezők (osztályok). Az osztályobjektum a heap-en található, és szerkezeti mezői vele együtt tárolódnak.
- Boxing (dobozolás). Amikor egy szerkezet objektumát
objectvagy interfész típusára konvertálják, akkor referenciatípusba csomagolják, és a heap-re helyezik. - Szerkezetek elemei tömbökben. Egy tömb (amely referenciatípus) a heap-en helyezkedik el, és szerkezeti elemei a számára lefoglalt memóriában tárolódnak.
Boxing példája:
// A szerkezet objektum a veremben van
int kezdetiÉrték = 10;
// Boxing: a szerkezetet egy objektumba csomagolják, és a heap-re helyezik
object becsomagoltÉrték = kezdetiÉrték;
// Cast (unboxing) szükséges az értékkel való munkához int-ként
int unboxedÉrték = (int)becsomagoltÉrték;
Osztály mezőjeként szerkezet példája:
// Az osztály objektuma a heap-en lesz
public class Konténer
{
// A szerkezet osztálymezőként a konténer objektummal együtt a heap-en tárolódik
public Pont Koordináták;
}
// A szerkezet definíciója
public struct Pont
{
public int X;
public int Y;
}
// Konténer osztálypéldány létrehozása a heap-en
Konténer c = new Konténer();
Szerkezet tömb példája:
// A Pont tömb referenciatípus, és a heap-en helyezkedik el
Pont[] pontTömb = new Pont[5];
// A tömb elemei (Pont szerkezetek) a tömb számára lefoglalt memóriában tárolódnak a heap-en
pontTömb[0] = new Pont { X = 1, Y = 2 };