Skip to content

Skillnad på const och readonly

Både const och readonly används för att deklarera variabler som inte kan ändras efter att de har initialiserats. Här är skillnaderna mellan dem:

  • Definieras vid tilldelningstid och måste ha ett värde när det deklareras.
  • Är en kompileringstidskonstant, vilket innebär att värdet kan beräknas vid kompilering.
  • Är alltid implicit statiskt.
  • Använder syntaxen ClassName.ConstantName för att komma åt värdet.
  • Om värdet ändras måste alla klienter kompileras om.
  • Exempel:
// Constants
public const int CM_IN_A_METER = 100;
public const string COURSE_NAME = "csharp";
  • Värdet kan tilldelas antingen vid deklarationen eller i konstruktorn
  • Kan definieras vid kompileringen eller runtime.
  • Är en runtime-konstant, vilket innebär att det kan tilldelas ett värde första gången men inte ändras efter det.
  • Behöver inte vara statiskt.
  • Använder en referens till en minnesplats.
  • Om värdet ändras behöver bara den ursprungliga assemblyn omkompileras.
  • Exempel:
public class Rectangle
{
// Readonly fält för höjd
public readonly double Height;
// Konstant värde för bredden
public const double WIDTH = 1000;
public Rectangle(double height)
{
Height = height;
}
public double GetArea()
{
return Height * WIDTH;
}
}

Vi har en klass Rectangel med en konstant bredd för att passa in på en viss webbsida. Höjden kan däremot bestämmas när ett objekt skapas genom en parameter till konstruktorn.

Om du är säker på att värdet aldrig kommer att ändras, använd const. Om du är osäker eller om värdet kan ändras, använd readonly.