Stałe (Przewodnik programowania w języku C#)
Stałe są niezmiennymi wartościami, które są znane w czasie kompilacji i nie zmieniają się w okresie życia programu. Stałe są deklarowane za pomocą modyfikatora const . Tylko wbudowane typy języka C# mogą być deklarowane jako const
. Stałe typu odwołania inne niż String mogą być inicjowane tylko z wartością null . Typy zdefiniowane przez użytkownika, w tym klasy, struktury i tablice, nie mogą być const
. Użyj modyfikatora readonly, aby utworzyć klasę, strukturę lub tablicę, która jest inicjowana jednorazowo w czasie wykonywania (na przykład w konstruktorze), a następnie nie można jej zmienić.
Język C# nie obsługuje const
metod, właściwości ani zdarzeń.
Typ wyliczenia umożliwia definiowanie nazwanych stałych dla wbudowanych typów całkowitych (na przykład int
, uint
, long
i tak dalej). Aby uzyskać więcej informacji, zobacz wyliczenie.
Stałe muszą być inicjowane, gdy są deklarowane. Na przykład:
class Calendar1
{
public const int Months = 12;
}
W tym przykładzie stała Months
jest zawsze równa 12 i nie można jej zmienić nawet przez samą klasę. W rzeczywistości, gdy kompilator napotka stały identyfikator w kodzie źródłowym języka C# (na przykład Months
), zastępuje wartość literału bezpośrednio do kodu języka pośredniego (IL), który generuje. Ponieważ w czasie wykonywania nie ma adresu zmiennej skojarzonego z stałą, const
pola nie mogą być przekazywane przez odwołanie i nie mogą być wyświetlane jako wartość l w wyrażeniu.
Uwaga
Należy zachować ostrożność podczas odwoływania się do wartości stałych zdefiniowanych w innym kodzie, takim jak biblioteki DLL. Jeśli nowa wersja biblioteki DLL definiuje nową wartość dla stałej, program będzie nadal przechowywać starą wartość literału, dopóki nie zostanie ponownie skompilowana względem nowej wersji.
Jednocześnie można zadeklarować wiele stałych tego samego typu, na przykład:
class Calendar2
{
public const int Months = 12, Weeks = 52, Days = 365;
}
Wyrażenie używane do inicjowania stałej może odwoływać się do innej stałej, jeśli nie tworzy odwołania cyklicznego. Na przykład:
class Calendar3
{
public const int Months = 12;
public const int Weeks = 52;
public const int Days = 365;
public const double DaysPerWeek = (double) Days / (double) Weeks;
public const double DaysPerMonth = (double) Days / (double) Months;
}
Stałe mogą być oznaczone jako publiczne, prywatne, chronione, wewnętrzne, chronione wewnętrzne lub prywatne. Te modyfikatory dostępu definiują, jak użytkownicy klasy mogą uzyskiwać dostęp do stałej. Aby uzyskać więcej informacji, zobacz Modyfikatory dostępu.
Dostęp do stałych jest uzyskiwany tak, jakby były polami statycznymi , ponieważ wartość stałej jest taka sama dla wszystkich wystąpień typu. Nie używasz słowa kluczowego static
do ich deklarowania. Wyrażenia, które nie znajdują się w klasie definiującej stałą, muszą używać nazwy klasy, kropki i nazwy stałej, aby uzyskać dostęp do stałej. Na przykład:
int birthstones = Calendar.Months;
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.