Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 70 стр.

UptoLike

3.5.2.3. Поля
Поля объявляются внутри объявлений типов. Объявление поля осу-
ществляется с помощью директивы «.field» и состоит из трех частей:
1. последовательность атрибутов поля;
2. тип;
3. имя поля.
Последовательность атрибутов следует непосредственно после клю-
чевого слова «.field». В таблице 3.52 приведен набор наиболее часто ис-
пользуемых атрибутов.
Таблица 3.52. Атрибуты полей
После атрибутов следует тип поля и идентификатор, задающий имя
поля.
Рассмотрим несколько примеров:
1. Объявление поля x типа массив.
.field private int32[] x
2. Объявление поля table типа Hashtable.
.field public class
[mscorlib]System.Collections.Hashtable table
3.5.2.4. Методы
Методы объявляются внутри объявлений типов. Объявление метода
осуществляется с помощью директивы «.method» и состоит из пяти частей:
1. последовательность атрибутов метода;
2. тип возвращаемого значения;
3. имя метода;
4. список параметров метода;
5. тело метода.
Последовательность атрибутов следует непосредственно после клю-
чевого слова «.method». В таблице 3.53 приведен набор наиболее часто ис-
пользуемых атрибутов.
После атрибутов следует тип возвращаемого значения и идентифика-
тор, задающий имя метода. Если метод не возвращает значения, в качест-
Common Intermediate Language
127
Последовательность атрибутов следует непосредственно после клю-
чевого слова «.class». В таблице 3.51 приведен набор наиболее часто ис-
пользуемых атрибутов.
Таблица 3.51. Атрибуты типов
После атрибутов следует идентификатор, задающий имя объявляе-
мого типа.
Если объявляемый тип наследует от какого-нибудь другого типа
(базового класса), отличного от System.Object, то необходимо указать имя
базового класса после ключевого слова «extends». При этом, если в качест-
ве базового класса выбран System.ValueType, то объявляемый тип будет ти-
пом-значением.
Если объявляемый тип реализует методы каких-либо интерфейсов,
то должен быть приведен список этих интерфейсов после ключевого сло-
ва «implements».
Рассмотрим несколько примеров:
1. Объявление экспортируемого абстрактного класса, реализую-
щего интерфейс IEnumerable.
.class public abstract MyAbstractClass
extends [mscorlib]System.Object
implements [mscorlib]System.Collections.IEnumerable
{ }
2. Объявление неэкспортируемого интерфейса.
.class private interface MyInterface { }
3. Объявление экспортируемого типа-значения.
.class public sealed MyValueType
extends [mscorlib]System.ValueType
{ }
Обратите внимание, что перед именами библиотечных классов и ин-
терфейсов в квадратных скобках указывается имя сборки, в которой они
содержатся.
126
CIL и системное программирование в Microsoft .NET
Атрибут Описание
abstract Тип является абстрактным классом
interface Тип является интерфейсом
private Тип не экспортируется из сборки
public Тип экспортируется из сборки
sealed Тип не может являться базовым классом для другого
типа (от него нельзя наследовать)
serializable Экземпляры типа могут быть сериализованы
Атрибут Описание
assembly Поле видимо внутри сборки
family Поле видимо для наследников типа
public Поле видимо для всех
private Поле видимо только внутри типа
static Поле является статическим
126                         CIL и системное программирование в Microsoft .NET   Common Intermediate Language                                         127


     Последовательность атрибутов следует непосредственно после клю-            3.5.2.3. Поля
чевого слова «.class». В таблице 3.51 приведен набор наиболее часто ис-              Поля объявляются внутри объявлений типов. Объявление поля осу-
пользуемых атрибутов.                                                           ществляется с помощью директивы «.field» и состоит из трех частей:
                                                                                         1. последовательность атрибутов поля;
      Таблица 3.51. Атрибуты типов                                                       2. тип;
                                                                                         3. имя поля.
Атрибут           Описание
                                                                                     Последовательность атрибутов следует непосредственно после клю-
abstract          Тип является абстрактным классом                              чевого слова «.field». В таблице 3.52 приведен набор наиболее часто ис-
interface         Тип является интерфейсом                                      пользуемых атрибутов.
private           Тип не экспортируется из сборки
public            Тип экспортируется из сборки                                       Таблица 3.52. Атрибуты полей
sealed            Тип не может являться базовым классом для другого             Атрибут            Описание
                  типа (от него нельзя наследовать)                             assembly           Поле видимо внутри сборки
serializable      Экземпляры типа могут быть сериализованы                      family             Поле видимо для наследников типа
                                                                                public             Поле видимо для всех
     После атрибутов следует идентификатор, задающий имя объявляе-              private            Поле видимо только внутри типа
мого типа.
                                                                                static             Поле является статическим
     Если объявляемый тип наследует от какого-нибудь другого типа
(базового класса), отличного от System.Object, то необходимо указать имя
базового класса после ключевого слова «extends». При этом, если в качест-           После атрибутов следует тип поля и идентификатор, задающий имя
ве базового класса выбран System.ValueType, то объявляемый тип будет ти-        поля.
пом-значением.                                                                      Рассмотрим несколько примеров:
     Если объявляемый тип реализует методы каких-либо интерфейсов,                    1. Объявление поля x типа массив.
то должен быть приведен список этих интерфейсов после ключевого сло-                       .field private int32[] x
ва «implements».                                                                      2. Объявление поля table типа Hashtable.
     Рассмотрим несколько примеров:                                                        .field public class
        1. Объявление экспортируемого абстрактного класса, реализую-                        [mscorlib]System.Collections.Hashtable table
           щего интерфейс IEnumerable.
             .class public abstract MyAbstractClass                             3.5.2.4. Методы
             extends [mscorlib]System.Object                                         Методы объявляются внутри объявлений типов. Объявление метода
             implements [mscorlib]System.Collections.IEnumerable                осуществляется с помощью директивы «.method» и состоит из пяти частей:
             { }                                                                         1. последовательность атрибутов метода;
        2. Объявление неэкспортируемого интерфейса.                                      2. тип возвращаемого значения;
             .class private interface MyInterface { }                                    3. имя метода;
        3. Объявление экспортируемого типа-значения.                                     4. список параметров метода;
             .class public sealed MyValueType                                            5. тело метода.
               extends [mscorlib]System.ValueType                                    Последовательность атрибутов следует непосредственно после клю-
              { }                                                               чевого слова «.method». В таблице 3.53 приведен набор наиболее часто ис-
     Обратите внимание, что перед именами библиотечных классов и ин-            пользуемых атрибутов.
терфейсов в квадратных скобках указывается имя сборки, в которой они                 После атрибутов следует тип возвращаемого значения и идентифика-
содержатся.                                                                     тор, задающий имя метода. Если метод не возвращает значения, в качест-