Составители:
Рубрика:
1. временные значения хранятся не в куче, а непосредственно в
локальных переменных метода;
2. в массивах типов-значений содержатся не ссылки на значения,
а непосредственно сами значения.
Поэтому в общую систему типов были добавлены так называемые
пользовательские типы-значения. Эти типы могут быть объявлены про-
граммистом, но, как и встроенные типы-значения, размещаются не в ку-
че, а в ячейках.
Пользовательские типы-значения делятся на структуры и перечисле-
ния.
Структуры являются аналогом классов. Они, как и классы, могут со-
держать поля, методы, свойства и события. Все структуры неявно наследу-
ют от библиотечного класса System.ValueType, и, более того, встроенные
типы-значения также наследуют от этого класса. Тут сразу следует заме-
тить, что система типов не предусматривает никакого наследования стру-
ктур, кроме данного неявного. Другими словами, структуры не могут на-
следоваться друг от друга и, тем более, не могут наследоваться от классов
(кроме System.ValueType).
Перечисления представляют собой структуры с одним целочислен-
ным полем Value. Кроме того, перечисления содержат набор констант, оп-
ределяющих возможные значения поля Value. При этом для каждой кон-
станты в перечислении хранится ее имя. Перечисления неявно наследуют
от библиотечного класса System.Enum, который, в свою очередь, является
наследником все того же класса System.ValueType.
1.2.2.2. Указатели
Использование указателей может значительно увеличить производи-
тельность, и в некоторых языках программирования указатели применя-
ются исключительно часто (например, в C). Однако считается, что приме-
нение указателей чревато появлением в программах большого количества
трудноуловимых неперехватываемых ошибок. Поэтому, например, систе-
ма типов уже упоминавшейся платформы Java обходится без указателей.
Тем не менее, разработчикам .NET удалось добавить указатели в об-
щую систему типов. При этом появилось две категории указателей: упра-
вляемые указатели (managed pointers) и неуправляемые указатели (unman-
aged pointers).
Для того чтобы программы оставались безопасными, на использова-
ние управляемых указателей наложен целый ряд ограничений:
1. Управляемые указатели могут содержать только адреса ячеек, то
есть они могут указывать исключительно только на глобальные
и локальные переменные, параметры методов, поля объектов и
ячейки массивов. Для полноты картины следует заметить, что
Введение в архитектуру Microsoft .NET Framework
19
числения) и указатели. Схема общей системы типов, на которой отражены
эти дополнительные элементы, приведена на рис. 1.8.
Рис. 1.8. Общая система типов
1.2.2.1. Структуры и перечисления
Как показал опыт платформы Java, которая была разработана задол-
го до платформы .NET, одной из основных причин ухудшения производи-
тельности Java-программ является медленная работа сборщика мусора,
вызванная большим количеством мелких объектов в куче. Это явление
можно наблюдать в двух случаях:
1. Интенсивное создание временных объектов с очень малым вре-
менем жизни. Зачастую такие объекты создаются и используют-
ся в теле одного метода.
2. Использование гигантских массивов объектов, при котором
возникает ситуация, изображенная на рис. 1.6, а именно: в мас-
сиве хранятся ссылки на огромное количество небольших объе-
ктов.
Разработчиками .NET был подмечен тот факт, что использование ти-
пов-значений вместо объектов позволяет избежать описанных выше про-
блем, потому что:
18
CIL и системное программирование в Microsoft .NET
Типы
Ссылочные
типы
Самоописы-
вающие типы
Встроенные
ссылочные типы
Классы
Массивы
Упакованные
типы-значения
Управляемые
указатели
Указатели
Интерфейсы
Неправляемые
указатели
Типы-значения
Встроенные
типы-значения
Целые типы
Типы с плаваю-
щей запятой
Структуры
Перечисления
18 CIL и системное программирование в Microsoft .NET Введение в архитектуру Microsoft .NET Framework 19 числения) и указатели. Схема общей системы типов, на которой отражены 1. временные значения хранятся не в куче, а непосредственно в эти дополнительные элементы, приведена на рис. 1.8. локальных переменных метода; 2. в массивах типов-значений содержатся не ссылки на значения, а непосредственно сами значения. Типы Поэтому в общую систему типов были добавлены так называемые пользовательские типы-значения. Эти типы могут быть объявлены про- Ссылочные граммистом, но, как и встроенные типы-значения, размещаются не в ку- Типы-значения че, а в ячейках. типы Пользовательские типы-значения делятся на структуры и перечисле- Встроенные Самоописы- ния. Интерфейсы Структуры являются аналогом классов. Они, как и классы, могут со- типы-значения вающие типы держать поля, методы, свойства и события. Все структуры неявно наследу- Встроенные ют от библиотечного класса System.ValueType, и, более того, встроенные Целые типы Указатели ссылочные типы типы-значения также наследуют от этого класса. Тут сразу следует заме- тить, что система типов не предусматривает никакого наследования стру- Типы с плаваю- Управляемые ктур, кроме данного неявного. Другими словами, структуры не могут на- Классы щей запятой указатели следоваться друг от друга и, тем более, не могут наследоваться от классов (кроме System.ValueType). Неправляемые Перечисления представляют собой структуры с одним целочислен- Структуры Массивы указатели ным полем Value. Кроме того, перечисления содержат набор констант, оп- ределяющих возможные значения поля Value. При этом для каждой кон- Упакованные Перечисления станты в перечислении хранится ее имя. Перечисления неявно наследуют типы-значения от библиотечного класса System.Enum, который, в свою очередь, является наследником все того же класса System.ValueType. Рис. 1.8. Общая система типов 1.2.2.2. Указатели 1.2.2.1. Структуры и перечисления Использование указателей может значительно увеличить производи- Как показал опыт платформы Java, которая была разработана задол- тельность, и в некоторых языках программирования указатели применя- го до платформы .NET, одной из основных причин ухудшения производи- ются исключительно часто (например, в C). Однако считается, что приме- тельности Java-программ является медленная работа сборщика мусора, нение указателей чревато появлением в программах большого количества вызванная большим количеством мелких объектов в куче. Это явление трудноуловимых неперехватываемых ошибок. Поэтому, например, систе- можно наблюдать в двух случаях: ма типов уже упоминавшейся платформы Java обходится без указателей. 1. Интенсивное создание временных объектов с очень малым вре- Тем не менее, разработчикам .NET удалось добавить указатели в об- менем жизни. Зачастую такие объекты создаются и используют- щую систему типов. При этом появилось две категории указателей: упра- ся в теле одного метода. вляемые указатели (managed pointers) и неуправляемые указатели (unman- 2. Использование гигантских массивов объектов, при котором aged pointers). возникает ситуация, изображенная на рис. 1.6, а именно: в мас- Для того чтобы программы оставались безопасными, на использова- сиве хранятся ссылки на огромное количество небольших объе- ние управляемых указателей наложен целый ряд ограничений: ктов. 1. Управляемые указатели могут содержать только адреса ячеек, то Разработчиками .NET был подмечен тот факт, что использование ти- есть они могут указывать исключительно только на глобальные пов-значений вместо объектов позволяет избежать описанных выше про- и локальные переменные, параметры методов, поля объектов и блем, потому что: ячейки массивов. Для полноты картины следует заметить, что
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »