Sobes.tech
Junior

Millistel eesmärkidel kasutatakse C#-s välja, millel on readonly-muutuja?

sobes.tech AI

Vastus AI-lt

C# keeles võib readonly modifikaatoriga märgitud väli olla initsialiseeritud ainult välja deklaratsiooni ajal või klassi konstruktoris. Pärast initsialiseerimist ei saa selle väärtust muuta.

Kasutamise eesmärgid:

  1. Muutumatuse tagamine: Tagab, et välja väärtus ei muutu juhuslikult pärast objekti loomist. See suurendab koodi usaldusväärsust ja lihtsustab silumist.
  2. Iga eksemplari jaoks konstantid: Erinevalt staatilistest konstantidest (const) võivad readonly väljad omada erinevaid väärtusi erinevatel klassi eksemplaridel.
  3. Initsialiseerimine konstruktoris: Annab võimaluse määrata välja lõplik väärtus konstruktoriloogika põhjal, mis pole võimalik const väljade puhul (neid tuleb initsialiseerida literaali või konstantsena kompileerimise ajal).
  4. Tõhususe parandamine struktuuridega töötamisel: Struktuuride puhul võivad readonly väljad parandada jõudlust, kuna kompilaator võib teha teatud optimeerimisi, teades, et väärtus ei muutu.

Näide:

public class MyClass
{
    public readonly int ImmutableValue; // Võib olla initsialiseeritud siin või konstruktoris
    public readonly string Name;

    // Konstruktor `readonly` väljade väärtuste määramiseks
    public MyClass(int value, string name)
    {
        ImmutableValue = value;
        Name = name;
    }

    // See meetod põhjustab kompileerimisvea, kuna üritab muuta `readonly` välja
    // public void TryChangeValue(int newValue)
    // {
    //     ImmutableValue = newValue; // Kompileerimisviga
    // }
}