Вход/Регистрация
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
вернуться

Троелсен Эндрю

Шрифт:

public static void CountToTen {

 for (int i = 0; i ‹ 10; i++);

}

Вы можете помнить о том, что коды операций br (br, blt и т.д.) используются для управления потоком программы в зависимости от выполнения некоторого условия. В нашем примере мы задали условие, по которому должен произойти выход из цикла, когда значение локальной переменной i станет равным 10. С каждым проходом к значению i добавляется 1, после чего сразу же выполняется тестовое сравнение.

Также напомним, что при использовании любых кодов операций CIL, связанных с ветвлением, нужно определить метку для обозначения в программном коде места, куда следует перейти в случае выполнения условия. С учетом этого рассмотрите следующий (расширенный) программный код CIL, сгенерированный с помощью ildasm.exe (включая и метки программного кода).

.method public hidebysig static void CountToTen cil managed {

 .maxstack 2

 .locals init ([0] int32 i) // Инициализация локальной целой 'i'.

 IL_0000: ldc.i4.0 // Загрузка этого значения в стек.

 IL_0001: stloc.0 // Сохранение значения под индексом '0'.

 IL_0002: br.s IL_0008 // Переход к IL_0008.

 IL_0004: ldloc.0 // Загрузка значения с индексом 0.

 IL_0005: ldc.i4.1 // Загрузка значения '1' в стек.

 IL_0006: add // Добавление в стек под индексом 0.

 IL_0007: stloc.0

 IL_0008: ldloc.0 // Загрузка значения с индексом '0'.

 IL_0009: ldc.i4.s 10 // Загрузка значения '10' в стек.

 IL_000b: blt.s IL_0004 // Меньше? Если да, то к 1L_0004.

 IL_000d: ret

}

В сущности, этот программный код CIL начинается с определения локальной переменной int32 и загрузки ее в стек. Затем осуществляются переходы между командами с метками IL_0008 и IL_0004, причем каждый раз значение i увеличивается на 1 и проверяется, осталось ли это значение меньше 10. Если нет, то происходит выход из метода.

Создание компоновочного блока .NET в CIL

Теперь, освоив синтаксис и семантику CIL, вы можете закрепить свои знания на практике, построив приложение .NET с использованием только CIL и текстового редактора. Ваше приложение будет состоять из приватного одномодульного *.dll, содержащего два определения типов класса, и консольного *.exe, взаимодействующего с этими типами.

Создание CILCars.dll

Первым делом следует построить файл *.dll для использования клиентом. Откройте любой текстовый редактор и создайте новый файл *.il с именем CILCars.il. Этот одномодульный компоновочный блок будет использовать два внешних двоичных файла .NET, поэтому вы можете начать свой файл программного кода CIL так.

// Ссылка на mscorlib.dll и

// System.Windows.Forms.dll

.assemblу extern mscorlib {

 .publickeytoken = (B7 7A 5С 56 19 34 E0 89)

 .ver 2:0:0:0

}

.assembly extern System.Windows.Forms {

 .publickeytoken = (B7 7A 5C 56 19 34 E0 89)

 .ver 2:0:0:0

}

// Определение одномодульного компоновочного блока.

.assembly CILCars {

 .hash algorithm 0х00008004

 .ver 1:0:0:0

}

.modulе СILCars.dll

Как уже было сказано, этот компоновочный блок будет содержать два типа класса. Первый тип, CILCar, определяет два поля данных и пользовательский конструктор. Второй тип, CarInfoHelper, определяет единственный статический метод с именем DisplayCarInfо, который использует CILCar в качестве параметра и возвращает void. Оба типа находятся в пространстве имен CILCars. В терминах CIL класс CILCar можно реализовать так.

// Реализация типа CILCars.CILCar.

.namespace CILCars {

 .class public auto ansi beforefieldinit CILCar extends [mscorlib]System.Object {

// Поле данных CILCar.

.field public string petName

.field public int32 currSpeed

// Пользовательский конструктор, который дает пользователю

// возможность присвоить полю данные.

  • Читать дальше
  • 1
  • ...
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: