Sobes.tech
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 object vagy 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 };