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 выше, в чем может быть проблема? Любая помощь будет принята с благодарностью.