OpCodes.Readonly フィールドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > OpCodes.Readonly フィールドの意味・解説 

OpCodes.Readonly フィールド

メモ : このフィールドは、.NET Framework version 2.0 で新しく追加されたものです。

以降の配列アドレス演算で、実行時に型チェックを実行しないこと、および変更可能性が制限されたマネージ ポインタを返すことを指定します。

名前空間: System.Reflection.Emit
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

解説解説

命令の 16 進数の形式、MSIL (Microsoft Intermediate Language) アセンブリ形式、および簡単な説明の一覧を次の表に示します。

このプリフィックスは、ldelema 命令の直前にだけ置くことができ、配列に対して特殊な Address メソッドを呼び出します。以降の演算に対して、次の 2 つの影響があります。

  1. 実行時に、型チェックの演算は実行されません。参照型の配列で使用すると、通常、ldelema 命令と stelem 命令の暗黙の型チェックが実行されます。値クラスの実行時の型チェックが行われることはないため、この場合 readonly は操作できません。

  2. 検証では、変更可能性が制限されたマネージ ポインタとしてアドレス演算の結果を扱います。

定義する型によって値を変更できるかどうかが制御されるため、ポインタは変更可能性が制限されていると言われます。値を適切に更新する非パブリック フィールドまたは非パブリック メソッドを公開しない値クラスの場合、ポインタは読み取り専用です。したがって、ポインタはプリフィックスの名前になります。特に、プリミティブ型を表すクラス (System.Int32 など) は、ミューテータを公開しないため、読み取り専用になります。

この方法で制限されたマネージ ポインタは、次の方法でのみ使用できます。

stobj、initobj、mkrefany の各演算またはすべての stind 命令を含め、他のすべての演算は許可されていません。

readonly プリフィックスの目的は、ジェネリック コードで配列から要素をフェッチする際の型チェックを回避することです。たとえば、arr 配列の要素型が m メソッドとのインターフェイスを持つように制約されたジェネリック型である式 arr[i].m() は、次の MSIL にコンパイルできます。

ldloc arr
ldloc i
readonly.
ldelema !0    // Loads the pointer to the object.
…             // Load the arguments to the call.
constrained. !0
callvirt m

readonly プリフィックスがないと、!0 が参照型の場合に ldelema 命令は型チェックを実行します。この型チェックは非効率的であるだけでなく、形式的に不正確でもあります。ldelema の型チェックは厳密な一致を求めるため、強力すぎます。配列が !0 型のサブクラスを保持している場合、上記のコードでは型チェックが失敗します。

値型と参照型の両方に対して機能する arr[i] のハンドルを持つために、要素自体ではなく、配列要素のアドレスがフェッチされます。そして、配列要素のアドレスを constrained callvirt 命令に渡すことができます。

通常、配列が参照型の要素を保持している場合、実行時のチェックをスキップすることは危険です。安全性を確保するには、このポインタを通じて配列への変更が行われないことを保証する必要があります。検証規則によってこれを保証します。制限されたマネージ ポインタは、インスタンス メソッド呼び出しのオブジェクトとして渡すことができるため、厳密に言うと値型に対して読み取り専用ではありませんが、値型に関するタイプ セーフの問題は発生しません。

readonly オペコードを使用できる Emit メソッド オーバーロードを次に示します。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
OpCodes クラス
OpCodes メンバ
System.Reflection.Emit 名前空間



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

OpCodes.Readonly フィールドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



OpCodes.Readonly フィールドのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS