Sobes.tech
Junior — Middle

Milyen folyamatok és következmények lépnek fel, amikor egy objektumot átadunk egy függvénynek vagy metódusnak a programozásban?

sobes.tech MI

Válasz az MI-től

C#-ban, amikor egy objektumot átadunk egy függvénynek vagy metódusnak, akkor ennek az objektumnak a referencia másolatát adjuk át, nem magát az objektumot. Ez azt jelenti, hogy a metóduson belül módosíthatjuk az objektum állapotát (mezőit és tulajdonságait), és ezek a változások láthatóak lesznek a metóduson kívül is, mivel a referencia ugyanarra az objektumra mutat a memóriában.

Azonban, ha a metóduson belül a paraméternek új referenciát rendelünk (például, param = new Object()), akkor ez nem befolyásolja az eredeti referenciát a metóduson kívül, mivel a referencia másolatát helyileg módosítjuk.

Példa:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // megváltoztatja az objektum nevét
    p = new Person(); // helyileg megváltoztatja a referenciát, de kívül nem hat
    p.Name = "Пётр";
}

Person person = new Person { Name = "Алексей" };
ChangeName(person);
Console.WriteLine(person.Name); // "Иван" lesz a kimenet

Tehát, egy objektum átadása a referencia érték szerinti átadása. Az objektum állapotának változásai megmaradnak, de a referencia újra hozzárendelése nem.