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

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

OpCodes.Constrained フィールド

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

仮想メソッド呼び出しを行う型を制約ます。

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

解説解説

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

constrained プリフィックス許可されるのは、callvirt 命令だけです。

この時点での MSIL スタックは、次のような状態であることが必要です。

  1. マネージ ポインタ ptrスタックプッシュされますptr の型は、thisType へのマネージ ポインタ (&) であることが必要です。これは、thisType参照を必要とする、プリフィックスのない callvirt 命令場合とは異なります

  2. プリフィックスのない callvirt 命令使用した場合同様にメソッド引数arg1 から argN までがスタックプッシュされます

constrained プリフィックスは、thisType値型参照型かを問わずcallvirt 命令一貫した方法実行できるようにデザインされています。

callvirt  method 命令プリフィックスとして constrained  thisType付けた場合命令次のように実行されます。

この最後ケースは、methodObjectValueType、または Enum定義され、しかも thisType によってオーバーライドされていない場合にだけ発生する可能性あります。この場合ボックス化によって元のオブジェクトコピー作成されます。ただし、ObjectValueType、および Enum のどのメソッドオブジェクトの状態を変更しないため、これを検出することはできません。

constrained プリフィックスは、ジェネリック コード作成する IL ジェネレータサポートしてます。通常callvirt 命令値型では有効ではありません。代わりにIL コンパイラptr の型および呼び出されるメソッドに応じてコンパイル時に前述の 'this' 変換効率的に実行することが必要となります。ただし、ptrコンパイル時には未知ジェネリック型場合コンパイル時にこの変換を行うことはできません。

constrained オペコードによって、ptr値型参照型かを問わずIL コンパイラ一貫した方法仮想関数呼び出しを行うことができますconstrained プリフィックスは、thisTypeジェネリック型変数である場合対象としていますが、非ジェネリック型に対して機能するため、値型参照型区別を隠す言語仮想呼び出し生成する際の複雑さ軽減できます

constrained プリフィックス使用すると、値型バージョン管理問題発生する可能性回避できますconstrained プリフィックス使用しない場合値型が System.Object のメソッドオーバーライドするかどうかに応じて異なIL出力する必要があります。たとえば、値型 V が Object.ToString() メソッドオーバーライドする場合は、call  V.ToString() 命令出力しオーバーライドない場合には、box 命令callvirt  Object.ToString() 命令出力しますバージョン管理問題は、オーバーライドしたときにオーバーライド後で削除され場合、およびオーバーライドしなかったときにオーバーライド後で追加され場合発生する可能性あります

インターフェイス メソッド実装している値型メソッドは、MethodImpl使用して変更できるため、値型に対してインターフェイス メソッド呼び出す場合にも、constrained プリフィックス使用できますconstrained プリフィックス使用しない場合コンパイラバインド先となる値型メソッドコンパイル時に選択するよう強制されます。constrained プリフィックス使用すると、MSILコンパイルではなく実行時インターフェイス メソッド実装するメソッドバインドすることが可能になります

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

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



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

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

   

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



OpCodes.Constrained フィールドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

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

©2024 GRAS Group, Inc.RSS