Sobes.tech
Junior

Do jakich celów używa się pól z modyfikatorem readonly w C#?

sobes.tech AI

Odpowiedź od AI

Pole z modyfikatorem readonly w C# może być inicjalizowane tylko w momencie deklaracji pola lub w konstruktorze klasy. Po inicjalizacji jego wartość nie może być zmieniona.

Cele użycia:

  1. Zapewnienie niezmienniczości: Gwarantuje, że wartość pola nie zostanie przypadkowo zmieniona po utworzeniu obiektu. To zwiększa niezawodność kodu i ułatwia debugowanie.
  2. Stałe dla każdego egzemplarza: W przeciwieństwie do statycznych stałych (const), pola readonly mogą mieć różne wartości dla różnych egzemplarzy klasy.
  3. Inicjalizacja w konstruktorze: Pozwala ustawić ostateczną wartość pola na podstawie logiki konstruktora, co jest niemożliwe dla pól const (które muszą być inicjalizowane literałem lub stałą podczas kompilacji).
  4. Zwiększenie wydajności przy pracy ze strukturami: Dla struktur, pola readonly mogą poprawić wydajność, ponieważ kompilator może wykonywać pewne optymalizacje, wiedząc, że wartość się nie zmieni.

Przykład:

public class MyClass
{
    public readonly int ImmutableValue; // Może być inicjalizowane tutaj lub w konstruktorze
    public readonly string Name;

    // Konstruktor do przypisywania wartości do pól readonly
    public MyClass(int value, string name)
    {
        ImmutableValue = value;
        Name = name;
    }

    // Ta metoda spowoduje błąd kompilacji, ponieważ próbuje zmienić pole readonly
    // public void TryChangeValue(int newValue)
    // {
    //     ImmutableValue = newValue; // Błąd kompilacji
    // }
}