Sobes.tech
Junior — Middle

Jaké procesy a důsledky nastávají, když je objekt předán funkci nebo metodě v programování?

sobes.tech AI

Odpověď od AI

V jazyce C# při předávání objektu do funkce nebo metody se předává kopie odkazu na tento objekt, nikoliv samotný objekt. To znamená, že uvnitř metody lze měnit stav objektu (jeho pole a vlastnosti), a tyto změny budou viditelné i mimo metodu, protože odkaz ukazuje na ten samý objekt v paměti.

Nicméně, pokud uvnitř metody přiřadíte parametru nový odkaz (například param = new Object()), nebude to mít vliv na původní odkaz mimo metodu, protože kopie odkazu je změněna lokálně.

Příklad:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // změní jméno objektu
    p = new Person(); // lokálně změní odkaz, ale mimo metodu to nemá vliv
    p.Name = "Пётр";
}

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

Tedy, předání objektu je předání odkazu po hodnotě. Změny stavu objektu zůstávají, ale přepsání odkazu nikoliv.