StałeCzęść NR.12

Zmienna w C# określona słowem kluczowym const staje się stałą, której zawartość jest na zawsze zawarta w bibliotece, w trakcie kompilacji. Ta wartość nie może zostać zmieniona w trakcie działania programu.

Próba przypisania jakiekolwiek wartości do stałej będzie skutkować błędem.

Stałe muszą znajdować się w klasie jako pole lub w lokalnym bloku kodu .

Poza kodem

W Javie zmienna określona słowem kluczowym final staje się stałą. Oczywiście stałe w C# i Javie mają podobne zachowanie.

Przykład lokalnych stałych

static void Main()
{
   const int bb = 10; // stała na poziomie kompilacji
}
public class MyApp
{
    {
        final double PI = 3.14;
    }
} 

Przykład stałych pól

Istnieje pewna różnica.

class MyClass
{
    final double E = 2.72;
    static final double PI = 3.14;
}
class MyClass
{
    const int b = 5; // na poziomie kompilacji stała
    public const int a = 10;
} 

W C# stałe (const) są domyślnie polami statycznymi, więc nie można do nich dopisać słowa static.

W Javie jest to możliwe. Chociaż o tym więcej bo to wynik czegoś innego.

Co stałe kompilowane nie mogą

Do stałych kompilowanych nie można przypisać typów referencyjnych i innych skomplikowanych wyrażeń wymagających działa samego programu.

ograniczenia CONST

Stałe parametry metod tylko Java

W Javie istnieje możliwość dodania parametru do metody w formie stałej. Wartość parametru oczywiście nigdy nie ulegnie zmianie.

void f(final int CC) {}  

Pola tylko do odczytu: readonly C#

W C# istnieje inne słowo kluczowe, które może utworzyć stałą… niekompilowaną…, a ustalaną w trakcie działania programu.

W C# mówi się na to “pole tylko do odczytu”. Dlaczego “pole” ponieważ nie można tego słowa kluczowego użyć w lokalnych zmiennych.

Mówisz się też na to “pole tylko do odczytu” by samą nazwą podkreślić, że nie jest to stała typu kompilowanego const. Słowo “stała” w C# jest kojarzona ze słowem kluczowym “const”.

READONLY

Gdy wartość zostanie raz ustalona do zmiennej tylko do odczytu, nie może ona później ulec zmianie.

READONLY 2

Pole tylko do odczytu może być tylko zainicjalizowane wewnątrz konstruktora lub przy przypisywaniu wartości do pola.

Pole tylko do odczytu może przyjąć każdy typ danych w przeciwieństwie do stałej kompilowanej.

readonly int[] tab3 = { 1, 2, 3 }; 

Jak to jest w Javie?

Stałe kompilowane i stałe w trakcie działania programu : Java

Java nie ma słowa kluczowego readonly, ale nie znaczy to, że nie ma stałych niekompilowanych.

Tylko stałe “final” zawarte w klasie są kompilowanymi stałymi w Javie pod warunkiem, że ich wartość jest znana w trakcie kompilacji.

Przykładowo:

Pola statyczne klasy mogą zaliczać się do stałych kompilowanych jeśli nie przypiszemy do nich wartości, które będą decydowane dopiero w trakcie działania programu.

Każde inne użycie słowa kluczowego final tworzy stałą deklarowaną dopiero w trakcie działania programu.

class MyClass
{
    final double E = 2.72; // stała  tworzona w trakcie działania programu
    final static double C = 3e8; // stała kompilowana
    final static int RND = (new
    java.util.Random()).nextInt(); // stała  tworzona w trakcie działania programu
} 

Stałe kiedy je stosować

Dobrze zawsze deklarować zmienną jako stałą, gdy wiemy, że jej wartość nigdy nie ulegnie zmianie. Daje nam to też gwarancję, że ktoś inny nie zmieni wartości tego pola przez pomyłkę.

Przykładem w C# dobra stałą jest pole statyczne tylko do odczytu “String.Empty”.