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.