CIL инструкции неожиданное возвращаемое значение

Я пытаюсь создать il-инструкции вручную в учебных целях, но столкнулся с небольшой проблемой.

У меня есть простая структура с интерфейсом: "MyInterface" с одним методом: "Handle", класс "AddTwo", который реализует "MyInterface" и класс "Program" с методом ввода. Ил-дамп выглядит так:

.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 ответов

Другие вопросы по тегам