## 3.9 Konstanten in einer Klasse ### 3.9.1 Konstanten mit dem Schlüsselwort »const« Wenn Sie einen Wert benötigen, der während der Laufzeit der Anwendung nicht geändert werden darf, dann sollten Sie eine Konstante deklarieren. Kennzeichnend für eine Konstante ist das Schlüsselwort const zwischen dem Zugriffsmodifizierer und dem Datentyp, beispielsweise:
    public class Mathematics {
      public const double PI = 3.14;
      ...
    }
Um eine Konstante auszuwerten, muss der Name der Klasse, in der die Konstante definiert ist, angegeben werden, beispielsweise so:
    Mathematics.PI;
Der Zugriff über eine Objektreferenz ist nicht erlaubt. Der Wert einer Konstanten wird schon bei der Kompilierung ausgewertet. Da Referenztypen erst zur Laufzeit aufgelöst werden können, kommen für diesen Konstantentyp im Grunde genommen nur Wertetypen wie int, long, double usw. in Frage. Eine Ausnahme bildet nur der Typ string, der unter .NET zwar als Referenztyp behandelt wird, aber dennoch als const-Konstante angegeben werden darf. ### 3.9.2 Schreibgeschützte Felder mit »readonly« Durch die Eliminierung des set-Blocks in einer Eigenschaft können Sie diese vor unbefugtem schreibendem Zugriff schützen. Dieses Verhalten kann auch innerhalb einer Felddefinition erreicht werden. Dazu wird die Deklaration um das reservierte Wort readonly ergänzt, zum Beispiel:
    public readonly double PI = 3.14;
Anders als bei einer const-Konstanten kann die Festlegung des Wertes einer readonly-Konstanten sowohl bei der Deklaration als auch innerhalb eines Konstruktors erfolgen. Das Festlegen in einer Methode ist nicht möglich. Eine readonly-Konstante ist besonders in den Fällen sehr gut geeignet, wenn die Konstante einen Referenztyp beschreiben soll. Im Gegensatz zu einer const-Konstanten wird eine readonly-Konstante auf einer Objektreferenz aufgerufen. Im folgenden Codebeispiel werden in der Klasse Coordinates die beiden Konstanten XCoordinate und YCoordinate beim Aufruf des Konstruktors festgelegt:
    class Coordinates {
      public readonly int XCoordinate;
      public readonly int YCoordinate;
      public Coordinates(int x, int y) {
        XCoordinate = x;
        YCoordinate = y;
      }
    }
Die folgenden drei Anweisungen zeigen, wie die beiden Konstanten ausgewertet werden:
    Coordinates point = new Coordinates(-12, 76);
    Console.WriteLine("X: " + point.XCoordinate);
    Console.WriteLine("Y: " + point.YCoordinate);