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

OpCodes.Call フィールド

渡されメソッド記述子によって示されているメソッド呼び出します。

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

解説解説

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

形式

アセンブリ形式

説明

28 < T >

call methodDesc

methodDesc によって記述されているメソッド呼び出します。

スタック遷移動作順番に示すと、次のようになります

  1. メソッド引数arg1 から argN までがスタックプッシュされます

  2. メソッド引数arg1 から argN までがスタックからポップされますメソッド呼び出しは、これらの引数使用して実行されメソッド記述子によって参照されているメソッド制御転送されます。完了すると、呼び出しメソッドによって戻り値生成され呼び出し元へ送られます。

  3. 戻り値スタックプッシュされます

call 命令は、命令と共に渡されメソッド記述子によって示されているメソッド呼び出します。メソッド記述子は、メタデータ トークンです。このメタデータ トークンは、呼び出すメソッドとそのメソッド渡されるためにスタック配置され引数の数、型、順序、および使用される呼び出し規約示しますcall 命令直前tail (Tailcall) プリフィックス命令を置くことによって、制御転送する前に現在のメソッドの状態を解放するように指定できます呼び出しによって、元のメソッドより信頼性の高いメソッド制御転送される場合スタック フレーム解放されません。この場合tail提供されなかったかのように実行継続されます。メタデータ トークンには、呼び出し静的メソッドインスタンス メソッド仮想メソッドグローバル関数のいずれであるかを確認できる情報あります。どの場合も、エンド ポイント アドレスは、メソッド記述子から判断されます。これに対して Callvirt 命令仮想メソッド呼び出す場合は、エンド ポイント アドレスCallvirt前にプッシュされたインスタンス参照ランタイム型にも依存します

引数は、スタック上に左から右に配置されます。つまり、まず最初引数計算されスタック配置され次に 2 番目の引数、その次に 3 番目の引数同様に配置され最終的に必要なすべての引数降順スタック配置されます。次に重要な意味を持つ特殊な 3 つの例を示します

1. インスタンス メソッドまたは仮想メソッド呼び出しは、ユーザー参照できる任意の引数前に、そのインスタンス参照プッシュする必要がありますインスタンス参照は、null 参照以外である必要がありますメタデータ送られるシグネチャには、this ポインタのためのパラメータ リストのエントリは含まれていません。シグネチャは、1 ビット使用してメソッドthis ポインタを渡すことを要求しているかどうか示します

2. callvirt ではなく call使用した仮想メソッド呼び出しは有効です。この方法で呼び出すと、メソッドは、呼び出されるオブジェクトから動的に指定されクラスではなくメソッドによって指定されクラス使用して解決されます。

3. デリゲートInvoke メソッドは、call 命令または callvirt 命令呼び出すことができます

システム セキュリティ呼び出し元に対して呼び出すメソッドへのアクセス許可してない場合は、SecurityException がスローされることがありますセキュリティ チェックは、実行時ではなくMSIL (Microsoft Intermediate Language) 命令ネイティブ コード変換されるときに発生する場合あります

メモメモ

値型に対して System.Object のメソッド呼び出す場合call 命令出力する代わりにcallvirt 命令constrained プリフィックス使用することを検討してください。これにより、値型メソッドオーバーライドするかどうかに応じて異なIL出力する必要がなくなるため、バージョン管理問題発生する可能性回避できますインターフェイス メソッド実装する値型メソッドは、MethodImpl使用して変更できるため、値型に対してインターフェイス メソッド呼び出す場合は、constrained プリフィックス使用することを検討してください。これらの問題詳細については、Constrained オペコードに関するトピック記載されています。

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

  • ILGenerator.Emit(OpCode, MethodInfo)

  • ILGenerator.EmitCall(OpCode, MethodInfo, Type[])

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


このページでは「.NET Framework クラス ライブラリ リファレンス」からOpCodes.Call フィールドを検索した結果を表示しています。
Weblioに収録されているすべての辞書からOpCodes.Call フィールドを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からOpCodes.Call フィールド を検索

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

辞書ショートカット

すべての辞書の索引

「OpCodes.Call フィールド」の関連用語

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

   

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



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

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

©2025 GRAS Group, Inc.RSS