C# でフィールドを `readonly` としてマークする利点は何ですか? 質問する

C# でフィールドを `readonly` としてマークする利点は何ですか? 質問する

メンバー変数を読み取り専用として宣言することの利点は何ですか? クラスのライフサイクル中に誰かがその値を変更するのを防ぐだけですか、それともこのキーワードを使用すると速度や効率が向上しますか?

ベストアンサー1

読み取り専用フィールドを使用することでパフォーマンスが向上するとは思いません。これは、オブジェクトが完全に構築された後、そのフィールドが新しい値を指すことができないことを確認するための単純なチェックです。

ただし、「readonly」は CLR によって実行時に強制されるため、他の種類の読み取り専用セマンティクスとは大きく異なります。readonly キーワードは、CLR によって検証可能な .initonly にコンパイルされます。

このキーワードの本当の利点は、不変のデータ構造を生成できることです。不変のデータ構造は、定義上、一度構築すると変更できません。これにより、実行時の構造の動作を非常に簡単に推測できます。たとえば、不変の構造をコードの別のランダムな部分に渡す危険はありません。変更できないため、その構造に対して確実にプログラムできます。

Robert Pickeringは不変性の利点について優れたブログ記事を書いています。記事は以下にあります。ここまたはarchive.org バックアップ

おすすめ記事