Przyszedł moment wyjaśnienia tematu, który być może powinien być omówiony dużo wcześniej, zważywszy że wcale nie jest trudny. Przywitajcie się ze słowem kluczowym "readonly" w języku C#! Sprawi ono, że wartość stanie się tylko do odczytu! A jakie są z tego płynące korzyści? No i jakie efekty :D?
Tweet |
TAGUJ ZMIENNĄ "READONLY" W JĘZYKU C#, ABY NIE MARTWIĆ SIĘ JEJ PÓŹNIEJSZĄ MODYFIKACJĄ!
"readonly" to kolejny z wielu modyfikatorów obowiązujących w "CSharpie", który sprawi że zmienna przestanie być zmienną, a stanie się daną tylko do odczytu. Chyba tak będzie najbezpieczniej napisać :P.
Wyjaśnienie jest proste. W sytuacji, gdy zmienna ma być odporna na modyfikacje, dorzucacie tytułowe słówko "readonly" w języku C# przed typem danych i to koniec Waszych zmartwień!
readonly int x = 15;
Najlepsze zastosowanie? Kiedy chcemy ochronić się przed modyfikacją - to chyba jasne! Efekt? Błąd kompilacji, do którego przyczynia się każda instrukcja przypisania bądź modyfikacji :D:
x = 6; // błąd
x += 14; // błąd
I tak dalej, i tak dalej…
OPCJA DEFINIOWANIA W KONSTRUKTORZE
"readonly" w języku C# możemy jak najbardziej użyć też w stosunku do danych składowych klasy. Mało tego, mamy prawo do zdefiniowania wartości tylko do odczytu także wewnątrz konstruktora! Jednak zapomnijcie o całej reszcie metod! Dlaczego? Bo tylko konstruktor wywołuje się ZANIM obiekt będzie gotowy do użytku, a w tym jest cały "clue", żeby wartość stała się wartością tylko do odczytu. Gdyby dało się taką możliwość metodzie wywoływanej po utworzeniu obiektu, cały sens tego mechanizmu zostałby zaprzeczony:
class MyClass
{
public readonly int v;
public MyClass()
{
v = 6;
}
}
Co więcej, dozwolone jest podwójne zdefiniowanie wartości, zarówno w linijce zadeklarowania zmiennej, jak i w konstruktorze:
class MyClass
{
public readonly int v = 17;
public MyClass()
{
v = 6;
}
}
Gdyby tak się to zrobiło, to pamiętajcie że obowiązuje ta wartość, która została zdefiniowana w konstruktorze!
Modyfikator "readonly" w języku C# nakłada zabezpieczenie na zmienną, która wówczas staje się wartością tylko do odczytu.
Nie odchodźcie daleko od mojej witryny. Już niedługo drugi luźno powiązany wątek, lecz o słowie "const" :)!