Junior — Middle
Тавзеҳ диҳед, ки навъҳои маълумот чӣ гунаанд, ки ба объектҳо дар хотира ишора мекунанд ва чӣ гуна аз навъҳои арзишӣ фарқ мекунанд.
sobes.tech AI
Ҷавоб аз AI
Дар C# намудҳои маълумот ба навъҳои арзишӣ (value types) ва навъҳои ишора (reference types) тақсим мешаванд.
-
Навъҳои ишора дар тағирот на худи маълумотҳоро, балки ишора (пойнтер) ба минтақаи хотира, ки маълумоти объект ҷойгир аст, нигоҳ медоранд. Мисолҳо: синфҳо (
class), сатрҳо (string), массивҳо. -
Навъҳои арзишӣ маълумотҳоро мустақиман дар тағирот нигоҳ медоранд. Мисолҳо: структураҳо (
struct), enumeration (enum), намудҳои асосӣ (int,boolва ғайра).
Фарқият:
- Ҳангоми таъин кардани навъи арзишӣ, маълумотҳо нусхабардорӣ мешаванд, дар ҳоле ки ҳангоми таъин кардани навъи ишора, ишора ба объект нусхабардорӣ мешавад.
- Навъҳои ишора дар heap идорашаванда ҷойгир мешаванд, дар ҳоле ки навъҳои арзишӣ одатан дар stack ё дар дохили объектҳои дигар ҷойгир мешаванд.
- Тағйиротҳо дар навъи ишора тавассути як ишора ба дигар ишораҳо ба ҳамон объект мушоҳида мешаванд, дар ҳоле ки нусхаҳои навъҳои арзишӣ мустақиланд.
Мисол:
class Person { public string Name; }
struct Point { public int X, Y; }
Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // нусхаи ишора
p2.Name = "Bob";
Console.WriteLine(p1.Name); // Натиҷа: "Bob" — ҳарду ишора ба як объект ишора мекунанд
Point pt1 = new Point { X = 1, Y = 2 };
Point pt2 = pt1; // нусхаи маълумот
pt2.X = 10;
Console.WriteLine(pt1.X); // Натиҷа: 1 — нусхаҳо мустақиланд