const (C# リファレンス)

定数フィールドまたはローカル定数を宣言するには、const キーワードを使用します。 定数フィールドとローカルは変数でないため、変更できません。 定数には、数字、ブール値、文字列、または null 参照が含まれます。 いずれかの時点で変わることが予想される情報を表すために定数を作成してはなりません。 たとえば、サービスの価格、製品バージョン番号、会社のブランド名などを格納するためには定数フィールドを使用しないでください。 これらの値は時間の経過とともに変更される場合があります。コンパイラは定数を伝達するため、ライブラリでコンパイルされた他のコードを再コンパイルして、変更点を反映することが必要になってしまいます。 readonly キーワードも参照してください。 次に例を示します。

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

C# 10 以降では、使用されるすべての式も定数文字列である場合は、補間された文字列が定数になることがあります。 この機能を使用すると、定数文字列を作成するコードを改善できます。

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

解説

定数宣言の型は、宣言で導入されるメンバーの型を指定します。 ローカル定数または定数フィールドの初期化子は、ターゲット型に暗黙に変換できる定数式であることが必要です。

定数式は、コンパイル時にすべて評価されます。 このため、参照型の定数になりうる値は、string と null 参照に限られます。

定数宣言は、複数の定数を宣言できます。たとえば、次のように宣言できます。

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

static 修飾子は、定数宣言では使用できません。

定数は、次に示すように、定数式の一部になることができます。

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

注意

readonly キーワードは、 キーワードとは異なります。 const フィールドは、フィールドの宣言でしか初期化できません。 readonly フィールドは、宣言またはコンストラクターのどちらかで初期化できます。 このため、readonly フィールドは、使用するコンストラクターに応じて異なる値を持つことができます。 また、const フィールドがコンパイル時定数であるのに対し、readonly フィールドは実行時定数として使用できます。たとえば、public static readonly uint l1 = (uint)DateTime.Now.Ticks; のように使用します。

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

この例では、定数をローカル変数として使用する方法を示しています。

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

C# 言語仕様

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目