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

UptoLike

Sort() для сортировки этого массива. Для доступа к отсортированному
массиву используются свойства Array и Count:
Public MustInherit Class SortedArray
Protected Arr() As Integer
Protected MustOverride Sub Sort()
Public Sub New(ByVal A() As Integer)
Dim i As Integer
Arr = New Integer(A.Length – 1) {}
Структура программных компонентов
79
Видимость типа (т.е. экспортируется он из сборки или нет) определя-
ется флагом видимости и хранится в поле Flags соответствующей этому
типу записи в таблице метаданных TypeDef. В таблице 2.3 приведен набор
флагов видимости для типов.
Доступ к методам, полям и свойствам типа определяется значением
флага доступа. Описание допустимых значений приводится в таблице 2.4.
2.3.2.2. Пример межъязыкового взаимодействия
Рассмотрим учебный пример, который представляет собой компо-
нентную систему, написанную сразу на четырех языках. Диаграмма клас-
сов примера дана на рисунке 2.13.
Абстрактный класс SortedArray реализован на Visual Basic .NET.
В этом классе определено поле Arr, представляющее собой массив целых
чисел. Конструктор класса SortedArray копирует в это поле массив, пере-
даваемый ему в качестве параметра, а затем вызывает абстрактный метод
78
CIL и системное программирование в Microsoft .NET
Флаг Значение Описание
NotPublic 0x00000000 Тип не экспортируется из сборки
Public 0x00000001 Тип экспортируется из сборки
NestedPublic 0x00000002 Вложенный тип доступен везде
NestedPrivate 0x00000003 Вложенный тип доступен только
внутри того типа, в который он
вложен
NestedFamily 0x00000004 Вложенный тип доступен на-
следникам того типа, в который
он вложен
NestedAssembly 0x00000005 Вложенный тип доступен везде
внутри сборки
NestedFamAndAssem 0x00000006 Вложенный тип доступен на-
следникам того типа, в который
он вложен, но только внутри
сборки
NestedFamOrAssem 0x00000007 Вложенный тип доступен везде
внутри сборки, и, кроме того,
наследникам того типа, в кото-
рый он вложен
Таблица 2.3. Флаги видимости для типов
Таблица 2.4. Флаги доступа для членов типа
Флаг Значение Описание
CompilerControlled 0x00000000 Доступ контролируется компи-
лятором
Private 0x00000001 Доступен только внутри типа
FamAndAssem 0x00000002 Доступен наследникам типа,
объявленным внутри сборки
Assembly 0x00000003 Доступен только внутри сборки
Family 0x00000004 Доступен наследникам типа
FamOrAssem 0x00000005 Доступен внутри сборки, а также
наследникам типа
Public 0x00000006 Доступен везде
Рис. 2.13. Диаграмма классов учебного примера
SortedArray
#Arr
+.ctor()
#Sort
+get_Array():Integer
+get_Count():Integer
BubleSortedArray
+.ctor()
#Sort()
InsertSortedArray
+.ctor()
#Sort()
Main
+main()
78                          CIL и системное программирование в Microsoft .NET   Структура программных компонентов                                     79


     Видимость типа (т.е. экспортируется он из сборки или нет) определя-             Таблица 2.4. Флаги доступа для членов типа
ется флагом видимости и хранится в поле Flags соответствующей этому
типу записи в таблице метаданных TypeDef. В таблице 2.3 приведен набор          Флаг                     Значение       Описание
флагов видимости для типов.
                                                                                CompilerControlled       0x00000000     Доступ контролируется компи-
     Таблица 2.3. Флаги видимости для типов                                                                             лятором
                                                                                Private                  0x00000001     Доступен только внутри типа
Флаг                   Значение        Описание                                 FamAndAssem              0x00000002     Доступен наследникам типа,
NotPublic              0x00000000      Тип не экспортируется из сборки                                                  объявленным внутри сборки
Public                 0x00000001      Тип экспортируется из сборки             Assembly                 0x00000003     Доступен только внутри сборки
NestedPublic           0x00000002      Вложенный тип доступен везде             Family                   0x00000004     Доступен наследникам типа
NestedPrivate          0x00000003      Вложенный тип доступен только            FamOrAssem               0x00000005     Доступен внутри сборки, а также
                                       внутри того типа, в который он                                                   наследникам типа
                                       вложен                                   Public                   0x00000006     Доступен везде
NestedFamily           0x00000004      Вложенный тип доступен на-
                                       следникам того типа, в который
                                       он вложен                                                         SortedArray
                                                                                                 #Arr
NestedAssembly         0x00000005      Вложенный тип доступен везде
                                                                                                 +.ctor()
                                       внутри сборки                                             #Sort
NestedFamAndAssem      0x00000006      Вложенный тип доступен на-                                                                             Main
                                                                                                 +get_Array():Integer
                                       следникам того типа, в который                                                                       +main()
                                                                                                 +get_Count():Integer
                                       он вложен, но только внутри
                                       сборки
NestedFamOrAssem       0x00000007      Вложенный тип доступен везде                   BubleSortedArray              InsertSortedArray
                                       внутри сборки, и, кроме того,              +.ctor()                      +.ctor()
                                       наследникам того типа, в кото-             #Sort()                       #Sort()
                                       рый он вложен

    Доступ к методам, полям и свойствам типа определяется значением                  Рис. 2.13. Диаграмма классов учебного примера
флага доступа. Описание допустимых значений приводится в таблице 2.4.
                                                                                Sort() для сортировки этого массива. Для доступа к отсортированному
2.3.2.2. Пример межъязыкового взаимодействия                                    массиву используются свойства Array и Count:
     Рассмотрим учебный пример, который представляет собой компо-
нентную систему, написанную сразу на четырех языках. Диаграмма клас-                 Public MustInherit Class SortedArray
сов примера дана на рисунке 2.13.                                                      Protected Arr() As Integer
     Абстрактный класс SortedArray реализован на Visual Basic .NET.                    Protected MustOverride Sub Sort()
В этом классе определено поле Arr, представляющее собой массив целых                   Public Sub New(ByVal A() As Integer)
чисел. Конструктор класса SortedArray копирует в это поле массив, пере-                  Dim i As Integer
даваемый ему в качестве параметра, а затем вызывает абстрактный метод                    Arr = New Integer(A.Length – 1) {}