有人可以解释一下在使用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推送到堆栈上?