Reflection.emit を介して関数呼び出しを行う前に、スタックに何をロードする必要があるか説明してもらえますか?
私は非常に簡単な方法を持っています
public static void Execute(string 1, string 2)
次のクラスのメソッドを動的に生成したい(残りは忘れて、整理しました)
public class Test{
public string s1;
public void Run(string s2)
{
MyOtherClass.Execute(s2,s1)
}
}
参照用に上記のテストのコピーを持っていますが、「呼び出し」の前に次のオペコードが発行されていることに気付きました。
- ldarg_1
- ldarg_0
- ldfld
問題は、ldarg_0 がそこで何をしているのかということです。呼び出しに必要な引数は 2 つだけです。CLR で ldarg_0 をスタックにプッシュする必要があるのはなぜですか?