Bueno digamos que tenemos el código C#:MSIL Pregunta (básico)
public override void Write(XDRDestination destination)
{
destination.WriteInt(intValue);
destination.WriteBool(boolValue);
destination.WriteFixedString(str1, 100);
destination.WriteVariableString(str2, 100);
}
IL:.
.method public hidebysig virtual instance void
Write(class [XDRFramework]XDRFramework.XDRDestination destination) cil managed
{
// Code size 53 (0x35)
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldarg.0
IL_0002: call instance int32 LearnIL.Test1::get_intValue()
IL_0007: callvirt instance void [XDRFramework]XDRFramework.XDRDestination::WriteInt(int32)
IL_000c: ldarg.1
IL_000d: ldarg.0
IL_000e: call instance bool LearnIL.Test1::get_boolValue()
IL_0013: callvirt instance void [XDRFramework]XDRFramework.XDRDestination::WriteBool(bool)
IL_0018: ldarg.1
IL_0019: ldarg.0
IL_001a: call instance string LearnIL.Test1::get_str1()
IL_001f: ldc.i4.s 100
IL_0021: callvirt instance void [XDRFramework]XDRFramework.XDRDestination::WriteFixedString(string,
uint32)
IL_0026: ldarg.1
IL_0027: ldarg.0
IL_0028: call instance string LearnIL.Test1::get_str2()
IL_002d: ldc.i4.s 100
IL_002f: callvirt instance void [XDRFramework]XDRFramework.XDRDestination::WriteVariableString(string,
uint32)
IL_0034: ret
} // end of method Test1::Write
ahora a la cuestión de mi entendimiento es que ldarg # pone los argumentos proporcionados a la método en la pila para que podamos trabajar con ellos? ¿Pero por qué llama ldarg.1 y ldarg.0 cuando el método solo toma un argumento?
¿Puedes extender un poco más tu respuesta? ¿Seguro que el primero es este pero es el primer ldarg.1 o ldarg.0 en este caso? – Peter