.NET Framework 4.0 では、Reflection API にいくつかの項目が導入されています。これらの項目は、非常に役立つものから私の仕事に不可欠なものまでさまざまです。これらの中には、 、 、 、および new クラスの保護されたコンストラクAssembly
ターModule
がMethodBody
ありLocalVariableInfo
ますCustomAttributeData
。回避するのが非常に面倒な、まだ必要なアイテムがいくつかあります。私がリストしたタイプを拡張する必要があるのと同じ [少数の] グループの人々に簡単に適用できると思います。
今回System.Reflection.Emit.OpCode
は、独自のパラメーターを使用して構造体のインスタンスを構築する方法を探しています。現在、内部コンストラクターを呼び出してインスタンスを作成しています。再利用のために構築されたアイテムをクラスのメンバーとして公開しているため、パフォーマンスに悪影響はありませんpublic static readonly
が、ご想像のとおり、これは非常に最適なシナリオではありません。
OpCode
現在の内部コンストラクターを公開することがOpCode
できない理由はありますかILGenerator
?
編集:これは例です。次のカスタム オペコードを作成することで、一時的なローカル変数を作成しなくても、命令の中間リスト間のバイト コード変換で使用できます。IL を出力する場合は、残りの命令を有効な IL 表現に変換しますが、私の場合、次のステップはカスタム命令swap
を理解する JIT です。プレフィックスswap
を使用しています。これは、有効な IL オペコードによって予約され、使用されていません。Prefix2
0xFD
/// <summary>
/// Swaps adjacent elements on the evaluation stack. The supplied inline int32 argument gives the
/// index of the topmost item in the pair.
/// </summary>
public static readonly OpCode Swap;
また、単純な/共通のマネージ コード表現を持たないが、さまざまなネイティブ コード ジェネレーターで使用できる単純なプラットフォーム依存の表現を持つ JIT 組み込み関数にもこれを使用します。これらの 1 つはldthread
(現在のマネージ スレッドのRuntimeThread
表現への参照をロードする) です。