C# の const と readonly の違いは何ですか? 質問する

C# の const と readonly の違いは何ですか? 質問する

C# のconstの違いは何ですか?readonly

どちらを優先するのでしょうか?

ベストアンサー1

明らかな違いは別として、

  • constVSの定義時に値を宣言する必要がありますが、readonly値は動的に計算できますが、コンストラクターが終了する前に割り当てる必要があります。その後は固定されます。
  • constは暗黙的に ですstaticClassName.ConstantNameそれらにアクセスするには表記法を使用します。

微妙な違いがあります。 で定義されたクラスを考えてみましょうAssemblyA

public class Const_V_Readonly
{
  public const int I_CONST_VALUE = 2;
  public readonly int I_RO_VALUE;
  public Const_V_Readonly()
  {
     I_RO_VALUE = 3;
  }
}

AssemblyBAssemblyAコード内でこれらの値を参照および使用します。これをコンパイルすると次のようになります。

  • 値の場合はconst、検索と置換のようなものです。値 2 はAssemblyBの IL に「焼き付けられます」。つまり、明日I_CONST_VALUE20 に更新しても、AssemblyB再コンパイルするまで 2 のままになります
  • 値の場合readonly、メモリ ロケーションへの のようなものですref。値は のAssemblyBIL に焼き付けられません。つまり、メモリ ロケーションが更新されると、AssemblyB再コンパイルなしで新しい値を取得します。したがって、I_RO_VALUEが 30 に更新された場合、ビルドするだけAssemblyAで、すべてのクライアントを再コンパイルする必要はありません。

したがって、定数の値が変わらないことが確実な場合は、 を使用しますconst

public const int CM_IN_A_METER = 100;

ただし、変化する可能性のある定数 (精度など) がある場合や、疑わしい場合は、 を使用しますreadonly

public readonly float PI = 3.14;

更新: Aku が最初にこれを指摘したので、彼について言及する必要があります。また、私がこれをどこで学んだかを宣伝する必要があります:効果的な C# - ビル・ワグナー

おすすめ記事