field - inputs - react tags
¿Por qué tengo que hacer ldarg.0 antes de llamar a un campo en MSIL? (1)
Quiero llamar a una función, con como parámetros una string
y un Int32
. La string
es solo un literal, el Int32
debería ser un field
. Así que pensé que debería ser algo como:
.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
}
Pero esto arroja el error de que este no es un código válido. Al agregar
ldarg.0
Antes de ldfld
funciona bien. ¿Por qué es esto, y esto me va a meter en problemas al tener más campos?
Los métodos de instancia tienen un parámetro implícito llamado "esto". Se carga como el primer argumento de la pila, por lo tanto, tiene ldarg.0 para "esto".