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:
-
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).
-
Wartość jest przypisywana w czasie kompilacji.
-
Wartość można ustawiać wyłącznie w deklaracji (co jest następstwem reguły 2).
-
// 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:
-
Może być poprzedzone modyfikatorem static.
-
Przetwarzane na poziomie runtime.
-
Można inicjalizować zarówno z poziomu deklaracji jak i konstruktora.
Jeszcze jedna różnica będąca następstwem pkt 2 z const:
const może być używana w konstrukcji case constant: break;
a readonly nie ;].
Racja, zaraz dopiszę.
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’
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łą.
No i też nie wszystko może być constem, struktura nie może być. A typy referencyjne inne niż string muszą mieć wartość null.