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

UptoLike

ся отношениями эквивалентности, то есть они рефлексивны, симметрич-
ны и транзитивны.
Рис. 1.7. Пример, объясняющий отношения идентичности и
равенства объектных ссылок
Отношение идентичности для объектных ссылок вводится следую-
щим образом: две объектных ссылки идентичны тогда и только тогда, ко-
гда они содержат адреса одного и того же объекта. На рис. 1.7 изображены
три объектных ссылки A, B и C, а также два равных объекта-строки. Так
как ссылки A и B содержат адрес одного и того же объекта, то они иден-
тичны между собой, но при этом они не идентичны ссылке C, содержащей
адрес другого объекта.
Отношение равенства для объектных ссылок формулируется так: две
объектных ссылки равны тогда и только тогда, когда они содержат адреса
равных объектов. Все три объектные ссылки, изображенные на рис. 1.7,
равны между собой.
Отношение идентичности для типов-значений определяется следую-
щим образом: два значения идентичны тогда и только тогда, когда они
принадлежат одному и тому же типу-значению, и представляющие их по-
следовательности битов равны.
Отношение равенства для примитивных типов-значений совпадает с
отношением идентичности.
Отношения идентичности и равенства играют большую роль при
программировании в среде .NET. Любой объект имеет виртуальный метод
Equals, унаследованный от System.Object и выполняющий сравнение объ-
ектов на равенство. В зависимости от реализации этого метода, отноше-
ние равенства может существенно меняться. При переопределении мето-
да Equals нужно иметь в виду, что два идентичных объекта обязательно
должны быть равны.
1.2.2. Дополнительные элементы системы типов .NET
Из соображений эффективности выполнения программ разработчи-
ки платформы .NET добавили в общую систему типов дополнительные
элементы, а именно: пользовательские типы-значения (структуры и пере-
Введение в архитектуру Microsoft .NET Framework
17
Особого внимания заслуживают особенности представления масси-
вов объектов и массивов типов-значений. Дело в том, что так как объекты
не могут храниться в ячейках, мы вынуждены вместо массивов объектов
использовать массивы объектных ссылок (см. рис. 1.6), в то время как зна-
чения типов-значений хранятся прямо в элементах массива.
1.2.1.3. Типы-интерфейсы
Интерфейсы служат для компенсации отсутствия в .NET множест-
венного наследования. Они могут рассматриваться как чисто абстрактные
классы, содержащие только перечисленные ниже элементы:
Абстрактные методы.
Статические методы.
Статические поля.
Абстрактные свойства.
Абстрактные события.
Хотя любой класс может наследоваться только от одного базового
класса, он может реализовывать произвольное количество интерфейсов.
То есть, интерфейс определяет контракт, которому должен удовлетворять
любой класс, реализующий этот интерфейс.
Нужно отметить, что интерфейс может содержать реализации стати-
ческих методов, но все остальные методы, включая методы свойств и со-
бытий, должны оставаться абстрактными.
1.2.1.4. Совместимость ячеек по присваиванию
Значение может иметь сразу несколько типов. Например, если неко-
торый объект реализует несколько интерфейсов, то каждый из них являет-
ся его типом. Та же ситуация наблюдается при наследовании: если класс
имеет несколько суперклассов, то объект такого класса может выступать в
качестве любого из этих суперклассов.
Как уже говорилось ранее, ячейки, в которых могут храниться значе-
ния, также имеют тип. Соответственно, ячейка может содержать только
значение, совместимое с ее типом. То есть, общая система типов не допу-
скает присваивание ячейке несовместимого с ее типом значения.
Формулируется следующее условие совместимости значения и ячей-
ки: для того чтобы некоторое значение можно было присвоить заданной
ячейке, необходимо и достаточно, чтобы хотя бы один из типов значения
совпадал с типом ячейки.
1.2.1.5. Идентичность и равенство значений
Для объектных ссылок и значений типов-значений вводятся отноше-
ния идентичности (identity) и равенства (equality). Эти отношения являют-
16
CIL и системное программирование в Microsoft .NET
“Hello”
“Hello”
A
B
C
A идентична B
A не идентична C
B не идентична C
A = B= C
16                          CIL и системное программирование в Microsoft .NET   Введение в архитектуру Microsoft .NET Framework                       17


     Особого внимания заслуживают особенности представления масси-              ся отношениями эквивалентности, то есть они рефлексивны, симметрич-
вов объектов и массивов типов-значений. Дело в том, что так как объекты         ны и транзитивны.
не могут храниться в ячейках, мы вынуждены вместо массивов объектов
использовать массивы объектных ссылок (см. рис. 1.6), в то время как зна-         A                                  A идентична B
чения типов-значений хранятся прямо в элементах массива.                                           “Hello”           A не идентична C
                                                                                  B                                  B не идентична C
1.2.1.3. Типы-интерфейсы
     Интерфейсы служат для компенсации отсутствия в .NET множест-                 C                “Hello”           A = B= C
венного наследования. Они могут рассматриваться как чисто абстрактные
классы, содержащие только перечисленные ниже элементы:
         • Абстрактные методы.                                                        Рис. 1.7. Пример, объясняющий отношения идентичности и
         • Статические методы.                                                        равенства объектных ссылок
         • Статические поля.
         • Абстрактные свойства.                                                     Отношение идентичности для объектных ссылок вводится следую-
         • Абстрактные события.                                                 щим образом: две объектных ссылки идентичны тогда и только тогда, ко-
     Хотя любой класс может наследоваться только от одного базового             гда они содержат адреса одного и того же объекта. На рис. 1.7 изображены
класса, он может реализовывать произвольное количество интерфейсов.             три объектных ссылки A, B и C, а также два равных объекта-строки. Так
То есть, интерфейс определяет контракт, которому должен удовлетворять           как ссылки A и B содержат адрес одного и того же объекта, то они иден-
любой класс, реализующий этот интерфейс.                                        тичны между собой, но при этом они не идентичны ссылке C, содержащей
     Нужно отметить, что интерфейс может содержать реализации стати-            адрес другого объекта.
ческих методов, но все остальные методы, включая методы свойств и со-                Отношение равенства для объектных ссылок формулируется так: две
бытий, должны оставаться абстрактными.                                          объектных ссылки равны тогда и только тогда, когда они содержат адреса
                                                                                равных объектов. Все три объектные ссылки, изображенные на рис. 1.7,
1.2.1.4. Совместимость ячеек по присваиванию                                    равны между собой.
     Значение может иметь сразу несколько типов. Например, если неко-                Отношение идентичности для типов-значений определяется следую-
торый объект реализует несколько интерфейсов, то каждый из них являет-          щим образом: два значения идентичны тогда и только тогда, когда они
ся его типом. Та же ситуация наблюдается при наследовании: если класс           принадлежат одному и тому же типу-значению, и представляющие их по-
имеет несколько суперклассов, то объект такого класса может выступать в         следовательности битов равны.
качестве любого из этих суперклассов.                                                Отношение равенства для примитивных типов-значений совпадает с
     Как уже говорилось ранее, ячейки, в которых могут храниться значе-         отношением идентичности.
ния, также имеют тип. Соответственно, ячейка может содержать только                  Отношения идентичности и равенства играют большую роль при
значение, совместимое с ее типом. То есть, общая система типов не допу-         программировании в среде .NET. Любой объект имеет виртуальный метод
скает присваивание ячейке несовместимого с ее типом значения.                   Equals, унаследованный от System.Object и выполняющий сравнение объ-
     Формулируется следующее условие совместимости значения и ячей-             ектов на равенство. В зависимости от реализации этого метода, отноше-
ки: для того чтобы некоторое значение можно было присвоить заданной             ние равенства может существенно меняться. При переопределении мето-
ячейке, необходимо и достаточно, чтобы хотя бы один из типов значения           да Equals нужно иметь в виду, что два идентичных объекта обязательно
совпадал с типом ячейки.                                                        должны быть равны.

1.2.1.5. Идентичность и равенство значений                                      1.2.2. Дополнительные элементы системы типов .NET
     Для объектных ссылок и значений типов-значений вводятся отноше-                Из соображений эффективности выполнения программ разработчи-
ния идентичности (identity) и равенства (equality). Эти отношения являют-       ки платформы .NET добавили в общую систему типов дополнительные
                                                                                элементы, а именно: пользовательские типы-значения (структуры и пере-