Sobes.tech
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 — нусхаҳо мустақиланд