Junior
Майдони бо модификатори readonly дар C# барои чӣ истифода мешаванд?
sobes.tech AI
Ҷавоб аз AI
Даргоҳи бо тағйирёбандаи readonly дар C# метавонад танҳо дар лаҳзаи эълони даргоҳ ё дар конструктори синф оғоз ёбад. Пас аз оғозёбӣ, арзиши он тағйир дода намешавад.
Мақсадҳои истифода:
- Таъмини беҷоиш: Гарант мекунад, ки арзиши даргоҳ тасодуфан пас аз эҷоди объект тағйир намеёбад. Ин ба боварӣ дар код ва осон кардани хатоёбӣ кӯмак мекунад.
- Константҳо барои ҳар як намуна: Баръакс ба константҳои статик (
const), даргоҳҳоиreadonlyметавонанд арзишҳои гуногун барои намунаҳои гуногун дошта бошанд. - Иҷозат дар конструктор: Имкон медиҳад, ки арзиши ниҳоии даргоҳро бар асоси логикаи конструктор муайян кард, ки барои даргоҳҳои
constимконнопазир аст (онҳо бояд бо литер ё константа дар вақти компиляция оғоз ёбанд). - Беҳбуди иҷроиш дар кор бо сохторҳо: Барои сохторҳо, даргоҳҳои
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; // Хатои компиляция
// }
}