Sobes.tech
Junior — Middle

Kokie procesai ir pasekmės atsiranda, kai objektas perduodamas funkcijai ar metodui programavime?

sobes.tech AI

Atsakymas iš AI

C# kalbėje, perduodant objektą funkcijai ar metodui, perduodama nuorodos kopija į tą objektą, o ne pats objektas. Tai reiškia, kad metodo viduje galima keisti objekto būseną (jo laukus ir savybes), ir šie pakeitimai bus matomi už metodo ribų, nes nuoroda nurodo į tą patį objektą atmintyje.

Tačiau, jei metodo viduje priskiriate parametrui naują nuorodą (pavyzdžiui, param = new Object()), tai neturės įtakos originaliai nuorodai už metodo ribų, nes nuorodos kopija pakeičiama vietoje.

Pavyzdys:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // pakeis objekto vardą
    p = new Person(); // vietoje pakeis nuorodą, bet už metodo ribų tai neturės įtakos
    p.Name = "Пётр";
}

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

Taigi, objekto perdavimas — tai nuorodos perdavimas pagal reikšmę. Objekto būsenos pakeitimai lieka, o nuorodos pervadinimas — ne.