Sobes.tech
Junior — Middle

Тавре чӣ гуна намудҳои истинодӣ бо намудҳои арзишӣ дар C# фарқ мекунанд ва фарқҳои асосии онҳо дар истифода чист?

sobes.tech AI

Ҷавоб аз AI

В C# типҳо ба навъҳои арзишӣ (value types) ва навъҳои истинодӣ (reference types) тақсим мешаванд.

Навъҳои арзишӣ маълумотҳоро мустақиман нигоҳ медоранд. Мисолҳо: int, double, struct. Ҳангоми таъин кардан ё гузаронидан ба метод, худи арзиш нусхабардорӣ мешавад, яъне нусхаи мустақил сохта мешавад.

Навъҳои истинодӣ ба объект дар ёддошт (дар heap) ишора мекунанд. Мисолҳо: class, string, массивҳо. Ҳангоми таъин кардан, танҳо ишора нусхабардорӣ мешавад, на объект, бинобар ин чандин тағйирёбанда метавонанд ба як объект ишора кунанд.

Фарқиятҳои асосӣ:

  • Захира: навъҳои арзишӣ одатан дар стек, навъҳои истинодӣ — дар heap.
  • Нусхабардорӣ: навъҳои арзишӣ бо арзиш нусхабардорӣ мешаванд, навъҳои истинодӣ — бо ишора.
  • Равоншавӣ ҳангоми тағйир додан: тағйир додани навъи арзишӣ ба нусхаҳои дигар таъсир намерасонад, тағйир додани объект дар навъи истинодӣ дар ҳама ишораҳо таҷассум меёбад.

Мисол:

int a = 5;
int b = a; // нусхаи арзиш
a = 10; // a боқӣ мемонад 5

class Шахс { public string Ном; }
Шахс p1 = new Шахс { Ном = "Иван" };
Шахс p2 = p1; // нусхаи ишора
p2.Ном = "Пётр"; // p1.Ном низ ба "Пётр" тағйир меёбад