Директивы, атрибуты и коды операций CIL

Директивы, атрибуты и коды операций CIL

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

{new, public, this, base, get, set, explicit, unsafe, enum, operator, partial}

Вы, скорее всего, идентифицируете их, как ключевые слова языка C# (и это правильно). Но если присмотреться к элементам этого набора более внимательно, вы сможете заметить, что хотя здесь каждый элемент и является ключевым словом C#, они имеют совершенно разную семантику. Например, ключевое слово enum определяет тип, производный от System.Enum, а ключевые слова this и base позволяют ссылаться, соответственно, на текущий объект или родительский класс объекта. Ключевое слово unsafe используется для создания блока программного вода, который не должен непосредственно контролироваться средой CLR, а ключевое слово operator позволяет построить скрытый (специально именованный) метод, который будет вызываться тогда, когда вы применяете заданный оператор C# (например, знак сложения).

В отличие от такого высокоуровневого языка, как C#, язык CIL не просто определяет свой собственный набор ключевых слов. Набор лексем, понятных компилятору CIL, разделяется на три большие категории, в зависимости от семантического подтекста:

• директивы CIL;

• атрибуты CIL;

• коды операций CIL.

Каждая категория лексем CIL выражается с помощью своих специальных синтаксических конструкций, а сами лексемы объединяются с тем, чтобы в результате получился работоспособный компоновочный блок .NET.