C# のconst
との違いは何ですか?readonly
どちらを優先するのでしょうか?
ベストアンサー1
明らかな違いは別として、
const
VSの定義時に値を宣言する必要がありますが、readonly
値は動的に計算できますが、コンストラクターが終了する前に割り当てる必要があります。その後は固定されます。const
は暗黙的に ですstatic
。ClassName.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;
}
}
AssemblyB
AssemblyA
コード内でこれらの値を参照および使用します。これをコンパイルすると次のようになります。
- 値の場合は
const
、検索と置換のようなものです。値 2 はAssemblyB
の IL に「焼き付けられます」。つまり、明日I_CONST_VALUE
20 に更新しても、AssemblyB
再コンパイルするまで 2 のままになります。 - 値の場合
readonly
、メモリ ロケーションへの のようなものですref
。値は のAssemblyB
IL に焼き付けられません。つまり、メモリ ロケーションが更新されると、AssemblyB
再コンパイルなしで新しい値を取得します。したがって、I_RO_VALUE
が 30 に更新された場合、ビルドするだけAssemblyA
で、すべてのクライアントを再コンパイルする必要はありません。
したがって、定数の値が変わらないことが確実な場合は、 を使用しますconst
。
public const int CM_IN_A_METER = 100;
ただし、変化する可能性のある定数 (精度など) がある場合や、疑わしい場合は、 を使用しますreadonly
。
public readonly float PI = 3.14;
更新: Aku が最初にこれを指摘したので、彼について言及する必要があります。また、私がこれをどこで学んだかを宣伝する必要があります:効果的な C# - ビル・ワグナー