const (C# リファレンス)const (C# Reference)

定数フィールドまたはローカル定数を宣言するには、const キーワードを使用します。You use the const keyword to declare a constant field or a constant local. 定数フィールドとローカルは変数でないため、変更できません。Constant fields and locals aren't variables and may not be modified. 定数には、数字、ブール値、文字列、または null 参照が含まれます。Constants can be numbers, Boolean values, strings, or a null reference. いずれかの時点で変わることが予想される情報を表すために定数を作成してはなりません。Don’t create a constant to represent information that you expect to change at any time. たとえば、サービスの価格、製品バージョン番号、会社のブランド名などを格納するためには定数フィールドを使用しないでください。For example, don’t use a constant field to store the price of a service, a product version number, or the brand name of a company. これらの値は時間の経過とともに変更される場合があります。コンパイラは定数を伝達するため、ライブラリでコンパイルされた他のコードを再コンパイルして、変更点を反映することが必要になってしまいます。These values can change over time, and because compilers propagate constants, other code compiled with your libraries will have to be recompiled to see the changes. readonly キーワードも参照してください。See also the readonly keyword. 次に例を示します。For example:

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


定数宣言の型は、宣言で導入されるメンバーの型を指定します。The type of a constant declaration specifies the type of the members that the declaration introduces. ローカル定数または定数フィールドの初期化子は、ターゲット型に暗黙に変換できる定数式であることが必要です。The initializer of a constant local or a constant field must be a constant expression that can be implicitly converted to the target type.

定数式は、コンパイル時にすべて評価されます。A constant expression is an expression that can be fully evaluated at compile time. このため、参照型の定数になりうる値は、string と null 参照に限られます。Therefore, the only possible values for constants of reference types are string and a null reference.

定数宣言は、複数の定数を宣言できます。たとえば、次のように宣言できます。The constant declaration can declare multiple constants, such as:

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

static 修飾子は、定数宣言では使用できません。The static modifier is not allowed in a constant declaration.

定数は、次に示すように、定数式の一部になることができます。A constant can participate in a constant expression, as follows:

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


readonly キーワードは、const キーワードとは異なります。The readonly keyword differs from the const keyword. const フィールドは、フィールドの宣言でしか初期化できません。A const field can only be initialized at the declaration of the field. readonly フィールドは、宣言またはコンストラクターのどちらかで初期化できます。A readonly field can be initialized either at the declaration or in a constructor. このため、readonly フィールドは、使用するコンストラクターに応じて異なる値を持つことができます。Therefore, readonly fields can have different values depending on the constructor used. また、const フィールドがコンパイル時定数であるのに対し、readonly フィールドは実行時定数として使用できます。たとえば、public static readonly uint l1 = (uint)DateTime.Now.Ticks; のように使用します。Also, although a const field is a compile-time constant, the readonly field can be used for run-time constants, as in this line: 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()
        SampleClass mC = new SampleClass(11, 22);
        Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
        Console.WriteLine("c1 = {0}, c2 = {1}", 
                          SampleClass.c1, SampleClass.c2);
/* Output
    x = 11, y = 22
    c1 = 5, c2 = 10


この例では、定数をローカル変数として使用する方法を示しています。This example demonstrates how to use constants as local variables.

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

C# 言語仕様C# language specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also