Разработка компиляторов

       

Пример кода на MSIL


.class auto ansi Point extends ['mscorlib']System.Object { .field private int32 m_x .field private int32 m_y .method public specialname rtspecialname instance void .ctor() il managed { // Code size 21 (0x15) .maxstack 2 IL_0000: ldarg.0 IL_0001: call instance void ['mscorlib']System.Object::.ctor() IL_0006: ldarg.0 IL_0007: ldc.i4.0 IL_0008: stfld int32 Point::m_y IL_000d: ldarg.0 IL_000e: ldc.i4.0 IL_000f: stfld int32 Point::m_x IL_0014: ret } // end of method 'Point::.ctor'

На слайде приведен фрагмент MSIL-кода, сгенерированный по следующему классу на С#:

class Point { private int m_x, m_y; public Point() { m_x = m_y = 0; } }

В сгенерированном коде можно найти описание класса Point и тот факт, что он унаследован от System.Object, описание закрытых переменных типа Int32 m_x и m_y (отметим, что их имена сохраняются при обратном ассемблировании) и, наконец, конструктор класса Point.

На начальном этапе знакомства с .NET изучение сгенерированного MSIL-кода представляется весьма полезным, так что рекомендуем слушателям самостоятельно ознакомиться с утилитой ILDasm.



Содержание раздела