Sobes.tech
Junior — Middle

Aké procesy a dôsledky nastávajú, keď je objekt odovzdaný do funkcie alebo metódy v programovaní?

sobes.tech AI

Odpoveď od AI

V jazyku C# sa, pri odovzdaní objektu do funkcie alebo metódy, odovzdáva sa kópia odkazu na tento objekt, nie samotný objekt. To znamená, že vo vnútri metódy je možné meniť stav objektu (jeho polia a vlastnosti), a tieto zmeny budú viditeľné aj mimo metódy, pretože odkaz ukazuje na ten istý objekt v pamäti.

Avšak, ak vo vnútri metódy priradíte parametru nový odkaz (napríklad, param = new Object()), nebude to mať vplyv na pôvodný odkaz mimo metódy, pretože kópia odkazu sa mení lokálne.

Príklad:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // zmení meno objektu
    p = new Person(); // lokálne zmení odkaz, ale mimo metódy to nemá vplyv
    p.Name = "Пётр";
}

Person person = new Person { Name = "Алексей" };
ChangeName(person);
Console.WriteLine(person.Name); // vypíše "Иван"

Teda, odovzdanie objektu je odovzdanie odkazu podľa hodnoty. Zmeny stavu objektu zostávajú, ale prepis odkazu — nie.