他の回答の static-constructor を使用できない、または使用したくない場合 (たとえば、変数を実際に初期化する前に型を使用することがたくさんあるため、または静的コンストラクターが本当に苦痛であることを理解しているため)デバッグする..) あなたは他のことをすることができます:
コンパイル時の解決策の 1 つは、変数を非静的読み取り専用として独自の型にパックし、この型への静的参照を保持することです。
public class Constants
{
public readonly int MIN;
public Constants() { MIN = 18; }
}
public class Foo
{
public static Constants GlobalConstants { get; private set; }
public static void Main()
{
// do lots of stuff
GlobalConstants = new GlobalConstants();
}
}
または、定数をプロパティにして、クラス外のユーザーにのみゲッターを提供することもできます。宣言クラスは引き続きプロパティを変更できることに注意してください。
public class Foo
{
public static int MIN { get; private set; } }
public static void Main()
{
MIN = 18;
MIN = 23; // this will still work :(
}
}
または、何らかの奇妙な理由で、コンパイルエラーではなく例外が本当に必要な場合は、定数からプロパティを作成し、セッターで例外をスローできます。
public class Foo
{
static int _min;
public static int MIN { get { return _min; } set { throw new NotSupportedException(); } }
public static void Main()
{
_min = 18;
}
}