我正在尝试手动创建il-instructions用于学习目的,但遇到了一个小问题。
我有一个带接口的简单结构:“MyInterface”只有一个方法:“Handle”,一个名为“AddTwo”的类,它实现了“MyInterface”,一个“Program”类带有一个entrymethod。 il-dump看起来像这样:
.class interface public abstract auto ansi MyInterface<TInput,TOutput>
{
.method public hidebysig newslot abstract virtual
instance !TOutput Handle(!TInput A_1) cil managed
{
} // end of method MyInterface::Handle
} // end of class MyInterface
.class public auto ansi plusTwo
extends [mscorlib]System.Object
implements class MyInterface<int32,int32>
{
.method public hidebysig newslot virtual final
instance int32 Handle(int32 x) cil managed
{
// Code size 13 (0xd)
.maxstack 2
IL_0000: ldarg 0
IL_0004: nop
IL_0005: nop
IL_0006: ldc.i4 0x2
IL_000b: add
IL_000c: ret
} // end of method plusTwo::Handle
} // end of class plusTwo
.class public auto ansi Program
extends [mscorlib]System.Object
{
.method public static int32 Main() cil managed
{
.entrypoint
// Code size 34 (0x22)
.maxstack 2
.locals init (int32 V_0)
IL_0000: newobj instance void plusTwo::.ctor()
IL_0005: ldc.i4 0xa
IL_000a: callvirt instance !1 class MyInterface<int32,int32>::Handle(!0)
IL_000f: stloc V_0
IL_0013: nop
IL_0014: nop
IL_0015: ldloc V_0
IL_0019: nop
IL_001a: nop
IL_001b: ldc.i4 0x5
IL_0020: add
IL_0021: ret
} // end of method Program::Main
} // end of class Program
在上面我希望输出为:17,但是我得到一个随机高整数,随着每个测试而变化。它看起来像一个内存地址或其他东西。有人可以通过查看上面生成的IL来说明问题可能是什么?任何帮助将不胜感激。