Sobes.tech
Junior

Майдони бо модификатори readonly дар C# барои чӣ истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Даргоҳи бо тағйирёбандаи readonly дар C# метавонад танҳо дар лаҳзаи эълони даргоҳ ё дар конструктори синф оғоз ёбад. Пас аз оғозёбӣ, арзиши он тағйир дода намешавад.

Мақсадҳои истифода:

  1. Таъмини беҷоиш: Гарант мекунад, ки арзиши даргоҳ тасодуфан пас аз эҷоди объект тағйир намеёбад. Ин ба боварӣ дар код ва осон кардани хатоёбӣ кӯмак мекунад.
  2. Константҳо барои ҳар як намуна: Баръакс ба константҳои статик (const), даргоҳҳои readonly метавонанд арзишҳои гуногун барои намунаҳои гуногун дошта бошанд.
  3. Иҷозат дар конструктор: Имкон медиҳад, ки арзиши ниҳоии даргоҳро бар асоси логикаи конструктор муайян кард, ки барои даргоҳҳои const имконнопазир аст (онҳо бояд бо литер ё константа дар вақти компиляция оғоз ёбанд).
  4. Беҳбуди иҷроиш дар кор бо сохторҳо: Барои сохторҳо, даргоҳҳои readonly метавонанд иҷроишро беҳтар кунанд, зеро компилятор метавонад баъзе оптимизатсияҳоро анҷом диҳад, вақте ки арзиш тағйир намеёбад.

Масалан:

public class MyClass
{
    public readonly int ImmutableValue; // Мумкин аст дар ин ҷо ё дар конструктор оғоз ёбад
    public readonly string Name;

    // Конструктор барои таъин кардани арзишҳо ба даргоҳҳои readonly
    public MyClass(int value, string name)
    {
        ImmutableValue = value;
        Name = name;
    }

    // Ин усул хатои компиляцияро ба вуҷуд меорад, зеро кӯшиш мекунад, ки даргоҳро тағйир диҳад
    // public void TryChangeValue(int newValue)
    // {
    //     ImmutableValue = newValue; // Хатои компиляция
    // }
}