[解決済み] C#のconstとreadonlyの違いは何ですか?
2022-03-16 06:26:01
質問
とはどのような違いがあるのでしょうか?
const
と
readonly
をC#で使うのですか?
どのような場合にどちらを使うのでしょうか?
どのように解決するのですか?
という見かけ上の違いは別として
-
の定義時に値を宣言しなければなりません。
const
VSreadonly
値は動的に計算されますが、コンストラクタが終了する前に代入する必要があります。 -
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
の値は、find-replaceのようなものです。 値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;
Update: Akuが最初にこれを指摘したので、言及される必要があります。また、これをどこで知ったかを書いておく必要があります。 エフェクティブC# - ビルワグナー
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] enumを列挙するには
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] IEnumerable<T> と IQueryable<T> を比較する。
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] constexpr` と `const` の相違点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】C#で四捨五入する方法
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?