19

質問があります。最近、私は 3 つの異なるコード行を使用していることに気付きました。

public static class constant
{
    public static readonly int val1 = 5;
    public const int val2 = 5;
    public static int val3 { get { return 5; } }
}

私の質問は、それらは同じですか、どちらかを使用する必要がありますか? もしそうなら。いつ?

また、ビジュアルスタジオの追加の質問として、なぜそれらはすべてインテリセンスで異なって表現されるのですか?

ここに画像の説明を入力

4

7 に答える 7

0

フィールド定義でconstまたはを使用する場合。readonlyconst 修飾子は、primitive data型と文字列のみで使用できます。使用すると、const フィールドに割り当てられた値が、生成された IL コードのすべての参照に直接挿入されます。これは他のアセンブリにも当てはまります。その const フィールドを参照する他のアセンブリは、値自体を直接使用したかのようにコンパイルされます。読み取り専用フィールドはランタイム定数です。それらはメモリ内のある場所を占有し、通常の変数を参照したかのように、それらへの参照は実行時に解決されます。実際には、定数に似た変数です。

const:

値は、宣言されているアセンブリだけでなく、定数値を参照するすべてのアセンブリにもハードコードされるため、原則として、定数を避けるようにしてください。これにより、実際に奇妙な問題が発生する可能性があります。

  • 静的にすることはできません。
  • 値はコンパイル時に評価されます。
  • 宣言時にのみ初期化されます。

readonly:

  • インスタンスレベルまたは静的のいずれかです。
  • 値は実行時に評価されます。
  • 宣言またはコンストラクターのコードで初期化できます。
于 2013-09-02T18:33:34.210 に答える