Konstanter

En konstant är ett värde som aldrig ändras under programmets körning. I C# finns två nyckelord för detta: const och readonly.

När du läst detta ska du kunna

  • Förklara skillnaden mellan const och readonly
  • Använda const för kompileringstidskonstanter
  • Använda readonly för körtidskonstanter
  • Välja rätt nyckelord i rätt situation

const — känd vid kompilering

const används när värdet är känt redan när koden kompileras. Det måste tilldelas direkt vid deklarationen och kan aldrig ändras.

const double Pi = 3.14159265358979;
const int MaxScore = 100;
const string Version = "1.0.0";
Console.WriteLine($"Pi = {Pi}");
Console.WriteLine($"Max poäng: {MaxScore}");

Output

Pi = 3.14159265358979
Max score: 100

const är implicit static — den tillhör klassen, inte ett objekt.

Apropå Pi, om du vill memorisera siffrorna kolla den här videon.

readonly — sätts en gång vid körning

readonly används när värdet inte är känt vid kompilering — till exempel ett värde som läses från en fil, databas eller beräknas i konstruktorn. Det kan bara tilldelas i deklarationen eller i konstruktorn.

public class Configuration
{
public readonly string ConnectionString;
public readonly DateTime StartTime;
public Configuration(string connectionString)
{
ConnectionString = connectionString;
StartTime = DateTime.Now;
}
}
var config = new Configuration("Server=localhost;Database=Min");
Console.WriteLine(config.StartTime);

Output

2026-09-16 09:23:11

const vs readonly

constreadonly
Värdet käntVid kompileringKan sättas i konstruktor
Kan ändrasAldrigAldrig (efter konstruktorn)
Implicit staticJaNej
Tillåtna typerPrimitiver, string, enumAlla typer
PrestandaLite snabbare (inlined)Normal

Konvention — namngivning

Konstanter skrivs ofta med PascalCase i C# (inte SCREAMING_SNAKE_CASE som i Java/C):

const int MaxCount = 50; // C#-stil
const int max_count = 50; // Java-stil — undvik i C#

Vad är final?

final finns inte i C#. Det är ett nyckelord från Java och finns i många andra språk. I C# ersätts det av:

JavaC#
final fältreadonly
final klass (kan inte ärvas)sealed class
final metod (kan inte overridas)sealed override

Om du läser Java-kod eller dokumentation och ser final — tänk readonly för fält, sealed för klasser och metoder.

TL;DR

const = känt vid kompilering, kan aldrig ändras.
readonly = sätts i konstruktorn, kan aldrig ändras efter det.
final finns inte i C# — använd readonly (fält) eller sealed (klass/metod).
Använd const för matematiska konstanter och fasta konfigurationsvärden. Använd readonly när värdet beror på körtid.