Sobes.tech
Junior — Middle

Kādi procesi un sekas rodas, kad objekts tiek nodots funkcijai vai metodam programmēšanā?

sobes.tech AI

Atbilde no AI

C# valodā, nododot objektu funkcijai vai metodam, tiek nodota šī objekta atsauces kopija, nevis pats objekts. Tas nozīmē, ka iekšā metodē var mainīt objekta stāvokli (laukus un īpašības), un šīs izmaiņas būs redzamas ārpus metodes, jo atsauce norāda uz to pašu objektu atmiņā.

Tomēr, ja iekšā metodē parametram piešķir jaunu atsauci (piemēram, param = new Object()), tas neietekmēs oriģinālo atsauci ārpus metodes, jo atsauces kopija tiek mainīta lokāli.

Piemērs:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // mainīs objekta vārdu
    p = new Person(); // lokāli mainīs atsauci, bet ārpus metodes tas neietekmēs
    p.Name = "Пётр";
}

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

Tādējādi, objekta nodošana — tas ir atsauces nodošana pēc vērtības. Objekta stāvokļa izmaiņas paliek, bet atsauces pārrakstīšana — nē.