const (C#-referens)

Du använder nyckelordet const för att deklarera ett konstant fält eller en lokal konstant. Konstanta fält och lokalbefolkningen är inte variabler och kan inte ändras. Konstanter kan vara tal, booleska värden, strängar eller en nullreferens. Skapa inte en konstant som representerar information som du förväntar dig att ändra när som helst. Använd till exempel inte ett konstant fält för att lagra priset för en tjänst, ett produktversionsnummer eller ett företags varumärke. Dessa värden kan ändras med tiden och eftersom kompilatorer sprider konstanter måste annan kod som kompileras med dina bibliotek omkompileras för att se ändringarna. Se även nyckelordet readonly . Till exempel:

const int X = 0;
public const double GravitationalConstant = 6.673e-11;
private const string ProductName = "Visual C#";

Från och med C# 10 kan interpolerade strängar vara konstanter, om alla uttryck som används också är konstanta strängar. Den här funktionen kan förbättra koden som skapar konstanta strängar:

const string Language = "C#";
const string Platform = ".NET";
const string Version = "10.0";
const string FullProductName = $"{Platform} - Language: {Language} Version: {Version}";

Kommentarer

Typen av konstant deklaration anger vilken typ av medlemmar som deklarationen introducerar. Initieraren för en lokal konstant eller ett konstant fält måste vara ett konstant uttryck som implicit kan konverteras till måltypen.

Ett konstant uttryck är ett uttryck som kan utvärderas fullständigt vid kompileringstillfället. Därför är de enda möjliga värdena för konstanter av referenstyper strängar och en null-referens.

Den konstanta deklarationen kan deklarera flera konstanter, till exempel:

public const double X = 1.0, Y = 2.0, Z = 3.0;

Modifieraren static tillåts inte i en konstant deklaration.

En konstant kan delta i ett konstant uttryck enligt följande:

public const int C1 = 5;
public const int C2 = C1 + 100;

Kommentar

Nyckelordet readonly skiljer sig från nyckelordet const . Ett const fält kan bara initieras i fältets deklaration. Ett readonly fält kan initieras antingen i deklarationen eller i en konstruktor. Därför readonly kan fält ha olika värden beroende på vilken konstruktor som används. Även om ett const fält är en kompileringskonstant readonly kan fältet användas för körningskonstanter, som på den här raden: public static readonly uint l1 = (uint)DateTime.Now.Ticks;

Exempel

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
*/

I följande exempel visas hur du deklarerar en lokal konstant:

public class SealedTest
{
    static void Main()
    {
        const int C = 707;
        Console.WriteLine($"My local constant = {C}");
    }
}
// Output: My local constant = 707

Språkspecifikation för C#

Mer information finns i följande avsnitt i C#-språkspecifikationen:

Se även