const (odwołanie w C#)
Słowo kluczowe służy const
do deklarowania pola stałej lub stałej lokalnej. Pola stałe i lokalne nie są zmiennymi i mogą nie być modyfikowane. Stałe mogą być liczbami, wartościami logicznymi, ciągami lub odwołaniem o wartości null. Nie twórz stałej reprezentującej informacje, które mają zostać zmienione w dowolnym momencie. Na przykład nie używaj pola stałego do przechowywania ceny usługi, numeru wersji produktu ani nazwy marki firmy. Te wartości mogą się zmieniać w czasie, a ponieważ kompilatory propagują stałe, inne kod skompilowany z bibliotekami będzie musiał zostać ponownie skompilowany, aby zobaczyć zmiany. Zobacz również słowo kluczowe readonly . Na przykład:
const int X = 0;
public const double GravitationalConstant = 6.673e-11;
private const string ProductName = "Visual C#";
Począwszy od języka C# 10, ciągi interpolowane mogą być stałymi, jeśli wszystkie używane wyrażenia są również ciągami stałymi. Ta funkcja może poprawić kod, który kompiluje stałe ciągi:
const string Language = "C#";
const string Platform = ".NET";
const string FullProductName = $"{Platform} - Language: {Language}";
Uwagi
Typ deklaracji stałej określa typ elementów członkowskich, które wprowadza deklaracja. Inicjator stałej lokalnej lub pola stałej musi być wyrażeniem stałym, które może być niejawnie konwertowane na typ docelowy.
Wyrażenie stałe to wyrażenie, które można w pełni ocenić w czasie kompilacji. Dlatego jedynymi możliwymi wartościami stałych typów odwołań są ciągi i odwołanie o wartości null.
Deklaracja stała może zadeklarować wiele stałych, takich jak:
public const double X = 1.0, Y = 2.0, Z = 3.0;
Modyfikator static
nie jest dozwolony w deklaracji stałej.
Stała może uczestniczyć w wyrażeniu stałym w następujący sposób:
public const int C1 = 5;
public const int C2 = C1 + 100;
Uwaga
Słowo kluczowe readonly różni się od słowa kluczowego const
. const
Pole można zainicjować tylko w deklaracji pola. readonly
Pole można zainicjować w deklaracji lub w konstruktorze. readonly
W związku z tym pola mogą mieć różne wartości w zależności od używanego konstruktora. Ponadto, mimo że pole jest stałą const
czasu kompilacji, readonly
pole może być używane dla stałych czasu wykonywania, jak w tym wierszu: public static readonly uint l1 = (uint)DateTime.Now.Ticks;
Przykłady
public class ConstTest
{
class SampleClass
{
public int x;
public int y;
public const int C1 = 5;
public const int C2 = C1 + 5;
public SampleClass(int p1, int p2)
{
x = p1;
y = p2;
}
}
static void Main()
{
var mC = new SampleClass(11, 22);
Console.WriteLine($"x = {mC.x}, y = {mC.y}");
Console.WriteLine($"C1 = {SampleClass.C1}, C2 = {SampleClass.C2}");
}
}
/* Output
x = 11, y = 22
C1 = 5, C2 = 10
*/
W poniższym przykładzie pokazano, jak zadeklarować stałą lokalną:
public class SealedTest
{
static void Main()
{
const int C = 707;
Console.WriteLine($"My local constant = {C}");
}
}
// Output: My local constant = 707
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz następujące sekcje specyfikacji języka C#: