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

4.1.9Перечисляемые типы

Перечисляемые типы содержат конечное число значений, представляющих собой именованные константы. Каждый перечисляемый тип является производным от одного из следующих базовых типов: byte, sbyte, short, ushort, int, uint, long или ulong. Набор значений перечисляемого типа соответствует набору значений базового типа. Возможные значения перечисляемого типа не ограничиваются значениями именованных констант. Определение перечисляемых типов выполняется посредством объявлений перечисления (§14.1).

4.1.10Обнуляемые типы

Обнуляемые типы могут представлять все значения базового типа и дополнительное пустое значение. Обнуляемый тип обозначается как T?, где T — базовый тип. Данный синтаксис представляет собой сокращенное обозначение типа System.Nullable<T>. Эти синтаксические формы являются взаимозаменяемыми.

Напротив, необнуляемый тип значений представляет собой тип значений, отличный от System.Nullable<T> или его сокращенной формы T? (для любого типа T), плюс любой параметр типа, который должен иметь необнуляемый тип значений (то есть любой параметр типа с ограничением struct). Тип System.Nullable<T> определяет ограничение типа значений для типа T (§10.1.5). Это означает, что в качестве базового для обнуляемого типа может использоваться любой необнуляемый тип значений. Обнуляемые или ссылочные типы не могут использоваться в качестве базовых для обнуляемого типа. Например, int?? и string? являются недопустимыми типами.

Экземпляр обнуляемого типа T? обладает двумя открытыми свойствами, доступными только для чтения:

  • Свойство HasValue типа bool.

  • Свойство Value типа T.

Экземпляр, свойство HasValue которого имеет значение true, считается непустым. Свойство Value непустого экземпляра содержит возвращаемое значение.

Экземпляр, свойство HasValue которого имеет значение false, считается пустым. Пустой экземпляр имеет неопределенное значение. При попытке чтения свойства Value пустого экземпляра порождается исключение System.InvalidOperationException. Процесс доступа к свойству Value обнуляемого экземпляра называется развертыванием.

Помимо конструктора по умолчанию, для каждого обнуляемого типа T? предусмотрен открытый конструктор, принимающий один аргумент типа T. При вызове конструктора со значением x типа T в виде

new T?(x)

создается непустой экземпляр типа T?, свойству Value которого присваивается значение x. Процесс создания непустого экземпляра обнуляемого типа с использованием заданного значения называется свертыванием.

Доступны неявные преобразования литерала null к типу T? (§6.1.5) и типа T к T? (§6.1.4).

4.2Ссылочные типы

Предусмотрены следующие виды ссылочных типов: тип класса, тип интерфейса, тип массива и тип делегата.

ссылочный_тип: тип_класса тип_интерфейса тип_массива тип_делегата

тип_класса: имя_типа object dynamic string

тип_интерфейса: имя_типа

тип_массива: тип_не_массива спецификации_ранга

тип_не_массива: тип

спецификации_ранга: спецификация_ранга спецификации_ранга спецификация_ранга

спецификация_ранга: [ разделители_размерностейнеобязательно ]

разделители_размерностей: , разделители_размерностей ,

тип_делегата: имя_типа

Значение ссылочного типа представляет собой ссылку на экземпляр типа (объект). Особое значение null совместимо со всеми ссылочными типами и обозначает отсутствие экземпляра.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]