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.Ном низ ба "Пётр" тағйир меёбад