CIL指令意外返回值

时间:2015-06-02 22:20:22

标签: oop stack clr cil reflection.emit

我正在尝试手动创建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来说明问题可能是什么?任何帮助将不胜感激。

0 个答案:

没有答案