Sobes.tech
Middle

Объектҳои сохторӣ дар хешта метавонанд бошанд?

sobes.tech AI

Ҷавоб аз AI

Бале, онҳо метавонанд.

Объектҳои сохторӣ, ки намудҳои арзишӣ дар C# мебошанд, одатан дар стек нигоҳ дошта мешаванд. Аммо, онҳо дар ҳолатҳои зерин дар хати холӣ ҷойгир мешаванд:

  • Онҳо майдони навъи истинодӣ (классҳо) мебошанд. Объекти класс дар хати холӣ ҷойгир аст ва майдонҳои сохтории он бо ҳам нигоҳ дошта мешаванд.
  • Boxing (бастабандӣ). Вақте ки объекти сохторӣ ба объекти навъи object ё интерфейс табдил дода мешавад, он дар навъи истинодӣ печонида шуда, дар хати холӣ ҷойгир мешавад.
  • Элементи массивҳои сохторӣ. Массив (ки навъи истинодӣ аст) дар хати холӣ ҷойгир мешавад ва элементҳои сохтории он дар хотирае нигоҳ дошта мешаванд, ки барои ин массив ҷудо шудааст.

Масалан барои boxing:

// Объекти сохторӣ дар стек ҷойгир аст
int арзиши ибтидоӣ = 10;

// Boxing: сохтор дар объект печонида шуда, дар хати холӣ ҷойгир мешавад
object арзиши печонида = арзиши ибтидоӣ;

// Барои кор бо арзиш ҳамчун int, бояд каст (unboxing) кард
int арзиши unboxed = (int)арзишӣ печонида;

Масалан барои сохтор ҳамчун майдони класи:

// Объекти класи дар хати холӣ хоҳад буд
public class Контейнер
{
    // Сохтор ҳамчун майдони класи дар хати холӣ бо объект нигоҳ дошта мешавад
    public Нуқта Координатҳо;
}

// Тартиби сохтор
public struct Нуқта
{
    public int X;
    public int Y;
}

// Эҷоди объекти класи Контейнер дар хати холӣ
Контейнер c = new Контейнер();

Масалан барои массиви сохторҳо:

// Массиви Нуқтаҳо навъи истинодӣ буда, дар хати холӣ ҷойгир мешавад
Нуқта[] массивНуқтаҳо = new Нуқта[5];

// Элементҳои массив (сохторҳои Нуқта) дар хотирае, ки барои ин массив ҷудо шудааст, нигоҳ дошта мешаванд
массивНуқтаҳо[0] = new Нуқта { X = 1, Y = 2 };