I want to call a function, with as parameters a string
and an Int32
. The string
is just a literal, the Int32
should be a field
. So I thought it should be something like:
.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 }
But this throws the error that this is not valid code. When adding
ldarg.0
before ldfld
it runs just fine. Why is this, and is this going to get me into trouble when having more fields?
Instance methods have an implicit parameter called "this". It is loaded as the first argument to the stack, thus you have ldarg.0 for "this".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With