Sobes.tech
Junior — Middle

Lehet-e osztályt deklarálni egy függvényen belül vagy más blokkban, és azt a veremmemóriába helyezni?

sobes.tech MI

Válasz az MI-től

C#-ban lehet helyi osztályokat deklarálni metódusokon belül (a C# 7-től kezdve), de ezek nem kerülnek a veremmemóriába, mivel az osztályok referencia típusok, és mindig a kezelt heapen helyezkednek el.

Az értéktípusok számára, amelyek a veremben helyezhetők el, struktúrákat (struct) használnak. Azonban nem lehet struct-ot deklarálni egy metóduson belül — azoknak osztály vagy névtér szinten kell lenniük.

Példa helyi osztályra egy metóduson belül:

void MyMethod() {
    class LocalClass {
        public int Value;
    }
    var obj = new LocalClass { Value = 10 };
}

De az obj objektum a heapen lesz elhelyezve, nem a veremben.