Stała i tylko do odczytu
Przed przystąpieniem do implementacji kodu ważne jest zrozumienie koncepcji programowania w języku C #. Zanim przejdziemy do różnic między const i readonly, najpierw zrozumiemy słowa kluczowe i sposób ich użycia w programie. Oba są najczęstszymi słowami kluczowymi używanymi w programowaniu C # i zasadniczo w tym samym celu. Jednak oba słowa kluczowe bardzo się od siebie różnią. Const jest zastrzeżonym słowem używanym do reprezentowania stałych wartości i określa, że wartości nie można zmodyfikować po czasie kompilacji, podczas gdy readonly jest modyfikatorem, który może być użyty w polach i którego wartość może zostać zmieniona podczas działania. Rzućmy okiem na niektóre z kluczowych różnic między const i readonly.
Co to jest Const?
Const odnosi się do zmiennej stałej, której wartość należy przypisać tylko raz, podczas deklaracji. Kiedy słowo kluczowe const jest używane podczas deklaracji, staje się stałym znaczeniem, którego wartość pozostaje stała i nie można jej zmienić w programie. Jest to bardziej zarezerwowane słowo, które określa, że wartości nie można modyfikować po kompilacji. Domyślnie const jest domyślnie statyczna, więc można ją wywołać z nazwą klasy, używając "Classname.VariableName". Stałe wartości są również nazywane literałami. Może to być dowolny podstawowy typ danych, taki jak stała całkowita, zmienna stała lub literał łańcuchowy.
Co to jest ReadOnly?
Słowo kluczowe Readonly to modyfikator, który może być używany tylko w polach, ale nie w zmiennych lokalnych. Pole tylko do odczytu może zostać zainicjowane w momencie deklaracji lub wewnątrz konstruktora w tej samej klasie, więc wartości mogą być różne dla różnych wykonań programu w zależności od użytego konstruktora. Słowo kluczowe readonly określa, że zmienna instancji obiektu nie jest modyfikowalna, a każda próba modyfikacji po deklaracji powoduje błąd kompilacji. Zmienna nie staje się niemodyfikowalna aż do momentu wykonania. Zmienne są wykonywane tylko do odczytu, aby nie wywoływać kodu z przypadkowego modyfikowania go po jego skonstruowaniu.
Różnica między stałą a przeczytaną
Słowo kluczowe stałe (const) to nic innego jak niezmienne zmienne, których wartość można zainicjować tylko w czasie kompilacji. Te stałe wartości są również nazywane literałami. Po prostu pozwala nam określić, czy zmienna jest modyfikowalna czy nie. Mówiąc prościej, stałe są pośrednio statyczne i powinny zostać zainicjowane zanim zostaną użyte w programie. Natomiast słowo kluczowe "readonly" jest modyfikatorem, którego można używać w polach, a którego wartość można zmienić w czasie wykonywania. Zapobiega to zmianie pól i wartości, które można ustawić za pomocą zmiennych referencyjnych.
Domyślnie const jest statyczna, a wartości, które powinny być przypisane w momencie deklaracji zmiennej, oznaczają, że wartości są przypisywane tylko w czasie kompilacji. Stała jest deklarowana za pomocą słowa kluczowego "const". Inicjalizacja stałego pola musi być stałym wyrażeniem i nie może być modyfikowana. Mówiąc prosto, const jest stałą czasu kompilacji. Z drugiej strony z pola tylko do odczytu można zainicjować tylko na poziomie klasy, a nie wewnątrz metody, a pola nie można zmodyfikować po inicjalizacji. Innymi słowy, zmienne tylko do odczytu można zainicjować w momencie deklaracji lub wewnątrz konstruktora.
Wartość const jest umieszczana bezpośrednio w kodzie, ponieważ działa jako zamiennik w czasie kompilacji. Kompilator umieszcza stałą wartość w metadanych zestawu, która definiuje stałą i osadza wartość w samym kodzie IL po inicjalizacji, więc nie jest wymagana pamięć dla stałych w czasie wykonywania dla alokacji. Wartość "tylko do odczytu" nie jest stała i jest przechowywana w sterówce pamięci, której nie można przydzielić, dopóki jej typ nie zostanie załadowany. Pola tylko do odczytu są przechowywane w pamięci dynamicznej, więc wartości można uzyskać tylko w środowisku wykonawczym.
Chociaż oba słowa kluczowe są używane niemal w tym samym celu, mają różne semantyki wersjonowania binarnego. Gdy wyrażenie odwołuje się do stałej, kompilator osadza wartość podczas kompilacji. Jeśli więc wartość jest używana w innym złożeniu, oryginalny zespół musi zostać zaktualizowany, a wartość powinna zostać zmieniona. Zmiany w złożeniu nie są odzwierciedlane, dopóki nie zostaną ponownie skompilowane. Wartość nie jest uzyskiwana do czasu wykonania, gdy wyrażenie odwołuje się do pola tylko do odczytu. Jeśli wartość zostanie zmieniona w innym zestawie, zmiany zostaną odzwierciedlone w zespole, gdy tylko zostanie załadowany bez konieczności ponownego kompilowania.
Const vs. Readonly: Tabela porównawcza
Podsumowanie Const vs. vs. Readonly
Oba słowa kluczowe są używane dla tej samej rzeczy, która ma zadeklarować członka, aby wartości nie mogły być zmienione w całym programie. Jednak słowo kluczowe const bardzo różni się od słowa kluczowego readonly. Const jest zmienną stałą, której wartość powinna zostać zainicjalizowana podczas kompilacji, podczas gdy pole tylko do odczytu może zostać zainicjowane na poziomie klasy, w momencie deklaracji lub wewnątrz konstruktora. Const jest stałą czasu kompilacji, podczas gdy pola readonly są tylko do odczytu. Do zmiennych Constance można uzyskać dostęp za pomocą "Classname.VariableName", podczas gdy zmienne tylko do odczytu są dostępne przy użyciu "InstanceName.VariableName".Co więcej, zmienne const mogą być zadeklarowane w metodach, podczas gdy pola readonly nie mogą być zadeklarowane w metodach.