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

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

Шрифт:

// Наш компоновочный блок.

.assembly CILTypes {}

Это действительно определяет новый компоновочный блок .NET, но обычно в рамках декларации компоновочного блока размещаются дополнительные директивы. Для нашего примера добавьте в определение компоновочного блока номер версии 1.0.0.0 с помощью директивы .ver (заметьте, что все числовые идентификаторы в определении должны разделяться двоеточием, не точкой, как в C#).

// Наш компоновочный блок.

.assembly CILTypes {

 .ver 1:0:0:0

}

Поскольку компоновочный блок CILTypes является одномодульным компоновочным блоком, определение этого компоновочного блока завершается единственной директивой.module, которая указывает официальное имя двоичного .NET-файла, CILTypes.dll.

.assembly CILTypes {

.ver 1:0:0:0

}

// Этот модуль является одномодульным компоновочным блоком.

.module CILTypes.dll

Кроме директив .assembly и .module, есть и другие CIL-директивы, обеспечивающие дальнейшее уточнение структуры создаваемого двоичного файла .NET. В табл. 15.2 предлагаются описания еще двух директив уровня компоновочного блока,

Таблица 15.2. Дополнительные директивы компоновочного блока

Директива Описание
.mresources Если компоновочный блок использует встраиваемый ресурс (например, точечный рисунок или таблицу строк), эта директива используется для идентификации имени файла, содержавшего такой ресурс. В главе 20 ресурсы .NET рассматриваются подробно
.subsystem Эта директива CIL используется для указания предпочтительного пользовательского интерфейса для выполнения компоновочного блока, например, значение 2 означает, что компоновочный блок должен выполняться в рамках графического интерфейса с поддержкой форм, а значение 3 означает консольное приложение

Определение пространств имен

Итак, вы определили вид своего компоновочного блока (и необходимые внешние ссылки). Теперь можно создать пространство имен .NET (МуNamespace), используя для этого директиву .namespace.

// Наш компоновочный блок имеет одно пространство имен.

.namespace MyNamespace {}

Как и в C#, определение пространства имен CIL можно вложить во внешнее пространство имен. Вот пример вложения нашего пространства имен в корневое пространство имен с именем IntertechTraining.

.namespace IntertechTraining {

 .namespace MyNamespace {}

}

Кроме того, как и C#, язык CIL позволяет определить вложенное пространство имен так.

// Определение вложенного пространства имен.

.namespace IntertechTraining.MyNamespace{}

Определение типов класса

Пустые пространства имен не представляют собой большого интереса, поэтому давайте выясним, как в CIL определяется тип класса. Вполне логично, что для этого используется директива .class. Однако эта простая директива может иметь множество дополнительных атрибутов, уточняющих природу создаваемого типа. Для примера мы добавим простой общедоступный класс с именем MyBaseClass. Как и в C#, если не указать базовый класс явно, соответствующий тип будет автоматически получаться из System.Object.

.namespace MyNamespace {

 // В качестве базового класса предполагается System.Object.

 .class public MyBaseClass {}

}

Для создания типа класса, являющегося производным от любого класса, отличного от System.Object, используется атрибут extends. При ссылке на тип, определенный в пределах того же компоновочного блока, CIL требует, чтобы вы указали абсолютное имя (однако для базового класса из того же компоновочного блока вы можете опустить префикс, представляющий понятное имя компоновочного блока). Так, следующий вариант модификации MyBaseClass приведет к ошибке компиляции.

// Это компилироваться не будет!

.namespace MyNamespace {

 .class public MyBaseClass {}

 .class public MyDerivedClass extends MyBaseClass {}

}

Чтобы корректно определить родительский класс для MyDerivedClass, следует указать полное имя MyBaseClass, как показано ниже.

// Так будет лучше!

.namespace MyNamespace {

 .class public MyBaseClass {}

 .class public MyDerivedClass extends MyNamespace.MyBaseClass {}

}

Вдобавок к атрибутам public и extends определение класса CIL может иметь множество дополнительных спецификаторов, задающих параметры видимости типа, размещения полей и т.д. В табл. 15.3 предлагаются описаний некоторых атрибутов, которые могут использоваться с директивой .class.

Таблица 15.3. Атрибуты, которые могут использоваться с директивой .class

  • Читать дальше
  • 1
  • ...
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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