Sobes.tech
Junior

Kokiais tikslais naudojami laukai su readonly modifikatoriumi C#?

sobes.tech AI

Atsakymas iš AI

C# kalboje readonly modifikatoriumi pažymėtas laukas gali būti inicijuotas tik deklaracijos metu arba klasės konstruktoriuje. Po inicializacijos jo reikšmė negali būti keičiama.

Naudojimo tikslai:

  1. Neišardomumo užtikrinimas: Užtikrina, kad lauko reikšmė atsitiktinai nepasikeis po objekto sukūrimo. Tai didina kodo patikimumą ir palengvina klaidų paiešką.
  2. Kiekvieno egzemplioriaus konstantos: Skirtingai nuo statinių konstantų (const), readonly laukai gali turėti skirtingas reikšmes skirtinguose klasės egzemplioriuose.
  3. Inicijavimas konstruktoriuje: Leidžia nustatyti galutinę lauko reikšmę, pagrįstą konstruktoriaus logika, kas nėra įmanoma const laukams (jie turi būti inicijuoti literalu arba konstanta kompiliacijos metu).
  4. Našumo gerinimas dirbant su struktūromis: Struktūroms, readonly laukai gali pagerinti našumą, nes kompiliatorius gali atlikti tam tikras optimizacijas, žinodamas, kad reikšmė nesikeis.

Pavyzdys:

public class MyClass
{
    public readonly int ImmutableValue; // Gali būti inicijuotas čia arba konstruktoriuje
    public readonly string Name;

    // Konstruktorius `readonly` laukų reikšmėms priskirti
    public MyClass(int value, string name)
    {
        ImmutableValue = value;
        Name = name;
    }

    // Šis metodas sukels kompiliacijos klaidą, nes bando pakeisti `readonly` lauką
    // public void TryChangeValue(int newValue)
    // {
    //     ImmutableValue = newValue; // Kompiliacijos klaida
    // }
}