25

我想调用一个函数,作为参数 astring和 an Int32。thestring只是文字,Int32应该是field. 所以我认为它应该是这样的:

.method public hidebysig instance string TestVoid() cil managed
{
    .maxstack 1
    .locals init (
        [0] string CS$1$0000)
    L_0000: nop 
    L_0001: ldstr "myString"
    L_0006: ldfld int32 FirstNamespace.FirstClass::ByteField
    L_000b: call string [Class1]Class1.TestClass::Functie<int32>(string, int32)
    L_0010: ret 
}

但这会引发错误,即这不是有效的代码。添加时

ldarg.0 

ldfld它运行正常之前。为什么会这样,当拥有更多字段时,这会给我带来麻烦吗?

4

1 回答 1

42

实例方法有一个名为“this”的隐式参数。它作为堆栈的第一个参数加载,因此您有 ldarg.0 用于“this”。

于 2009-11-23T19:25:43.717 回答