web-dev-qa-db-ja.com

静的変数とconst変数の違い

グローバル変数を宣言する際の「静的」と「定数」の違いは何ですか?

namespace General
{
    public static class Globals
    {
        public const double GMinimum = 1e-1;

        public const double GMaximum = 1e+1;
    }
}

どちらが優れているか(これらの変数がこれまでと変わらないことを考慮して)

namespace General
{
    public static class Globals
    {
        public static double GMinimum1 = 1e-1;

        public static double GMaximum1 = 1e+1;
    }
}
10
Ibrahim Ozdemir

constおよびreadonlyはデータメンバーに対して同様の機能を実行しますが、いくつか重要な違いがあります。定数メンバーはコンパイル時に定義され、実行時には変更できません。定数は、constキーワードを使用してフィールドとして宣言され、宣言時に初期化する必要があります。

static修飾子は、静的メンバーを宣言するために使用されます。これは、メンバーが特定のオブジェクトに関連付けられなくなったことを意味します。値はクラスに属し、さらに、クラスのインスタンスを作成せずにメンバーにアクセスできます。静的フィールドと静的イベントのコピーは1つだけ存在し、静的メソッドと静的プロパティは静的フィールドと静的イベントにのみアクセスできます。

11
MrMins

const変数は、コンパイル後は変更できません。彼らは本当に一定のもの(すなわち、パイ)に適しています

staticメンバーは、特定のクラスのすべてのインスタンスからアクセス可能な共有メモリであり、publicなどのアクセス修飾子が使用されている場合はさらにアクセスできます(これらはjavascriptなどの言語のグローバル変数のように感じる場合があります)。静的メンバーは、いつでも再割り当てできる通常の変数のように動作します。

あなたの場合、数値が決して変更されないことが保証されている場合、それらをconstにします。変更された場合は、プログラムを新しい値で再コンパイルする必要があります。


どちらの方がよいですか? constを使用すると、リテラル値がアセンブリにベイクされ、パフォーマンスが向上します。

値を変更する必要がある場合、ソースを変更して再コンパイルするのにかかる時間が、この限界パフォーマンスの向上を台無しにします。

8
t3dodson

constは定数値であり、変更できません。アセンブリにコンパイルされます。

staticは、インスタンスに関連しない値であり、実行時に変更できることを意味します(readonlyではないため)。

したがって、値が変更されない場合は、constを使用します。

3
Maarten