投稿者 葉月  (社会人) 投稿日時 2010/5/18 23:07:54
前回のレスが中途半端でしたので続きになります。

>>>無関係とは言いませんが、直接の関連性は見出せませんでした。
ご指摘ありがとうございます。
>>2. それぞれの OpCode を解釈して、CodeDOM へと展開する。
デリゲートインスタンスを取得したのに、
鬼門を通る行為は現実的ではないのが理解できました。

>>>GetILAsByteArray で IL を読み取り、それを DynamicMethod 経由で
>>>呼び出すという行為ですよね
未熟なために難しく考えてしまうので、助言が頂けて助かります。
早速、提示されたサンプルに置き換えて動作を確認いたしました。

>サンプル
Dim fn As Func(Of IntegerIntegerInteger) = AddressOf CHoge.MyAdd
Dim ret As Integer = fn(iA, iB)


>>>これを System.Reflection.Emit.OpCodes に照らし合わせると、下記のような意味になります。
>>>分かりにくいですが、これが「Return iA + iB」の内部処理というわけです。
ILコードが読めるようになると、無駄な処理を省くことができるんですね。
丁寧な説明があったおかげで、私にも読み解くことができました。
00は明らかな無駄な処理ですし、D6・0A・06も必要ないのが理解できました。
魔界の仮面弁士さんのサンプルにある
info.SetCode(New Byte() {&H2, &H3, &HD6, &H2A}, 2)

SetCodeメソッドに必要な処理である02-03-D6-2Aを4バイトのバイナリーで
指定しているのが理解できました。
元のコードを使用して、丁寧に解説頂きましてありがとうございました。
まずはOpCodesクラスを覚えてから、ILGeneratorクラスを使い
サンプルを作っていこうと思います。