C#: const vs. read-only

Dzisiaj króciutki post na temat różnic między słowem kluczowym const a read-only. Oba słowa służą do deklarowania zmiennych niemodyfikowalnych. Jaka jest więc różnica?

const:

  1. Nie może być deklarowane z modyfikatorem static – stanowiłoby to pewną nadmiarowość ponieważ stałe odwołują się w końcu do całej klasy a nie instancji  (skoro nie mogą być zmodyfikowane nie ma sensu istnienia kopii dla każdej z instancji).
  2. Wartość jest przypisywana w czasie kompilacji.
  3. Wartość można ustawiać wyłącznie w deklaracji (co jest następstwem reguły 2).
  4. // UPDATE (Szogun1987 trafnie zasugerował jeszcze jedną różnicę wynikającą z punktu 2):
    Wartość oznaczona modyfikatorem const może być wykorzystywana w warunku case  constant (switch-case).

readonly:

  1. Może być poprzedzone modyfikatorem static.
  2. Przetwarzane na poziomie runtime.
  3. Można inicjalizować zarówno z poziomu deklaracji jak i konstruktora.

7 thoughts on “C#: const vs. read-only”

  1. no i nie wszystko może być ‘const’, tablice jak się nie mylę nie mogą ;->
    ale szczerze powiedziawszy, takie rzeczy zawsze sobie przypominam gdy próbuję dać ‘const’, a o ile mogę wolę użyć ‘const’

  2. Witam.
    Jeszcze jedna ważna różnica wynikająca z punktu 2.
    Jeżeli ze stałej const będziemy korzystać w innej bibliotece, niż ta w której została zdefiniwana, to każda zmiana wwartości const wymaga rekompilacji bibliotek z niej korzystających.

    Sytuacja ta nie występuje w przypadku static readonly.
    Wystarczy tylko kompilacji biblioteki z tą stałą.

  3. No i też nie wszystko może być constem, struktura nie może być. A typy referencyjne inne niż string muszą mieć wartość null.

Leave a Reply

Your email address will not be published.