Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ОСиСП.doc
Скачиваний:
68
Добавлен:
11.05.2015
Размер:
1.78 Mб
Скачать

Пользовательские типы

Конструкции структура,класс,интерфейсиперечислениеиспользуются для создания собственных пользовательских типов. Сама библиотека классов платформы .NET Framework является коллекцией пользовательских типов, предоставленной корпорацией Microsoft, которую можно использовать в собственных приложениях. По умолчанию наиболее часто используемые типы в библиотеке классов доступны в любой программе C#. Другие становятся доступными только при явном добавлении ссылки проекта на сборку, в которой они определены. Если компилятор имеет ссылку на сборку, то можно объявить переменные (и константы) типов, объявленных в сборке в исходном коде. Дополнительные сведения см. в разделеБиблиотека классов .NET Framework.

Система общих типов cts

Важно понимать две фундаментальные точки о системе типов в .NET Framework:

Она поддерживает принцип наследования. Типы могут быть производными от других типов, которые называются базовыми типами. Производный тип наследует (с некоторыми ограничениями) методы, свойства и другие члены базового типа. Базовый тип, в свою очередь, может быть производным от какого-то другого типа, при этом производный тип наследует члены обоих базовых типов в иерархии наследования. Все типы, включая встроенные числовые типы, например, System.Int32(ключевое словоint), в конечном счете являются производными от одного базового типа, который являетсяSystem.Object(ключевое слово C#:объектом). Эта унифицированная иерархия типов называетсяСистема общих типов CTS(CTS).

Каждый тип в CTS определен либо как тип значения, либо как ссылочный тип. Сюда включены все пользовательские типы в библиотеке классов платформы .NET Framework, а также собственные пользовательские типы.

Типы, определяемые с помощью ключевого слова struct, являются типами значений; все встроенные числовые типы являются structs.

Типы, определяемые с помощью ключевого слова class, являются ссылочными типами.

Правила времени компиляции и поведение времени выполнения ссылочных типов отличается от правил времени компиляции и поведения времени выполнения типов значений.

В следующем примере показана связь между типами значений и ссылочными типами в CTS:

Типы значений

Типы значений являются производными от System.ValueType, являющегося производным отSystem.Object. Типы, производные отSystem.ValueType, имеют особое поведение в среде CLR. Переменные типа значения напрямую содержат их значения, что означает, что память встроена в контекст, в котором объявлена переменная. Не существует отдельного размещения кучи или служебных данных сборки мусора для переменных типа значения.

Существует две категории типов значений: структураиперечисление.

Встроенные числовые типы являются структурами, и к их свойствам и методам можно получить доступ.

Но значения объявляются и присваиваются им, как если бы они были простыми не статическими типами:

Типы значений являются запечатанными, что означает, например, что нельзя произвести тип от System.Int32, и нельзя определить структуру для наследования от любого пользовательского класса или структуры, поскольку структура может наследовать только отSystem.ValueType. Однако структура может реализовать один или несколько интерфейсов. Можно выполнить приведение типа структуры в тип интерфейса; это приведет к операции упаковки-преобразования для создания программы-оболочки структуры внутри объекта ссылочного типа в управляемой куче. Операции упаковки-преобразования возникают при передаче типа значения методу, принимающемуSystem.Objectв качестве входного параметра. Дополнительные сведения см. в разделеУпаковка-преобразование и распаковка-преобразование (Руководство по программированию на C#).

Ключевое слово structиспользуется для создания собственных пользовательских типов значений. Обычно структура используется как контейнер для небольшого набора связанных переменных

Другой категорией типов значений является перечисление. Перечисление определяет набор именованных интегральных констант. Например, перечислениеSystem.IO.FileModeв библиотеке классов платформы .NET Framework содержит набор именованных констант целого типа, которые задают, как должен быть открыт файл.

Все перечисления наследуются от System.Enum, который наследуется отSystem.ValueType. Все правила, применимые к структурам, также применяются к перечислениям.