Sobes.tech
Junior — Middle

Dasturlashda ob'ekt funksiyaga yoki metodga o'tkazilganda qanday jarayonlar va natijalar yuzaga keladi?

sobes.tech AI

AIdan javob

C# da, ob'ektni funksiya yoki metodga uzatishda, bu ob'ektga havolaning nusxasi uzatiladi, ob'ektning o'zi emas. Bu shuni anglatadiki, metod ichida ob'ektning holatini (uning maydonlari va xususiyatlari) o'zgartirish mumkin va bu o'zgarishlar metod tashqarisida ham ko'rinadi, chunki havola xotirada aynan shu ob'ektni ko'rsatadi.

Ammo, agar metod ichida parametrga yangi havola tayinlasangiz (masalan, param = new Object()), bu metod tashqarisidagi asl havoni ta'sir qilmaydi, chunki havolaning nusxasi lokal ravishda o'zgartiriladi.

Misol:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // ob'ekt nomini o'zgartiradi
    p = new Person(); // lokal ravishda havolani o'zgartiradi, lekin tashqarida ta'sir qilmaydi
    p.Name = "Пётр";
}

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

Shunday qilib, ob'ektni uzatish - bu havolani qiymat bilan uzatishdir. Ob'ekt holatidagi o'zgarishlar saqlanadi, lekin havolani qayta tayinlash ta'sir qilmaydi.