const (C#-Referenz)
Sie verwenden das Schlüsselwort const
, um ein Konstantenfeld oder eine lokale Konstante zu deklarieren. Konstante Felder und lokale Felder sind keine Variablen und können daher nicht geändert werden. Konstanten können Nummern, boolesche Werte, Zeichenfolgen oder ein NULL-Verweis sein. Erstellen Sie keine Konstante, um Informationen darzustellen, bei denen Sie davon ausgehen, dass sie sich einmal ändern. Verwenden Sie beispielsweise kein konstantes Feld, um den Preis einer Dienstleistung, einer Produktversionsnummer oder den Markennamen eines Unternehmens zu speichern. Diese Werte können sich im Laufe der Zeit ändern, und da Compiler Konstanten weitergeben, muss anderer Code, der mit Ihren Bibliotheken kompiliert wird, neu kompiliert werden, damit die Änderungen sichtbar werden. Weitere Informationen finden Sie auch unter dem readonly-Schlüsselwort. Beispiel:
const int X = 0;
public const double GravitationalConstant = 6.673e-11;
private const string ProductName = "Visual C#";
Ab C# 10 können interpolierte Zeichenfolgen Konstanten sein, wenn alle verwendeten Ausdrücke auch konstante Zeichenfolgen sind. Dieses Feature kann den Code verbessern, der konstante Zeichenfolgen erstellt:
const string Language = "C#";
const string Platform = ".NET";
const string FullProductName = $"{Platform} - Language: {Language}";
Bemerkungen
Der Typ einer Konstantendeklaration gibt den Typ der Member an, die durch die Deklaration eingeführt werden. Der Initialisierer einer lokalen Konstante oder eines Konstantenfelds muss ein konstanter Ausdruck sein, der implizit in den Zieltyp konvertiert werden kann.
Ein konstanter Ausdruck ist ein Ausdruck, der während der Kompilierung vollständig ausgewertet werden kann. Daher sind Zeichenfolgen und ein NULL-Verweis die einzig möglichen Werte für Verweistypkonstanten.
In der Konstantendeklaration können mehrere Konstanten deklariert werden, z. B.:
public const double X = 1.0, Y = 2.0, Z = 3.0;
Der static
-Modifizierer ist in einer Konstantendeklaration nicht zulässig.
Eine Konstante kann wie folgt einen Teil eines konstanten Ausdrucks darstellen:
public const int C1 = 5;
public const int C2 = C1 + 100;
Hinweis
Das readonly-Schlüsselwort unterscheidet sich vom const
-Schlüsselwort. Ein const
-Feld kann nur bei der Deklaration des Felds initialisiert werden. Ein readonly
-Feld kann entweder bei der Deklaration oder in einem Konstruktor initialisiert werden. Daher können readonly
-Felder abhängig vom verwendeten Konstruktor über unterschiedliche Werte verfügen. Außerdem ist ein const
-Feld eine Kompilierzeitkonstante, während ein readonly
-Feld für Laufzeitkonstanten verwendet werden kann, wie in der folgenden Codezeile: public static readonly uint l1 = (uint)DateTime.Now.Ticks;
.
Beispiele
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
*/
Im folgenden Beispiel wird veranschaulicht, wie eine lokale Konstante deklariert wird:
public class SealedTest
{
static void Main()
{
const int C = 707;
Console.WriteLine($"My local constant = {C}");
}
}
// Output: My local constant = 707
C#-Sprachspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation: