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

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

Тип, определенный как класс,делегат, массив илиинтерфейс, является ссылочным типом. Во время выполнения при объявлении переменной ссылочного типа переменная содержит значениеnullдо явного создания экземпляра объекта с помощью оператораnewили назначения его объекту, который был создан в другом месте, с помощью new.

Интерфейс должен быть инициализирован вместе с объектом класса, который его реализует.

При создании объекта память размещается в управляемой куче, и переменная хранит только ссылку на расположение объекта. Для типов в управляемой куче требуются служебные данные и при их размещении, и при их удалении сборщиком мусора. Однако сборка мусора также в высокой степени оптимизирована, и в большинстве сценариев она не создает проблем с производительностью. Дополнительные сведения о сборке мусора см. в разделе Автоматическое управление памятью.

Все массивы являются ссылочными типами, даже если их члены являются типами значений. Массивы являются неявно производными от класса System.Array, но объявляются и используются они с упрощенным синтаксисом.

Ссылочные типы полностью поддерживают наследование. При создании класса можно наследовать от любого другого интерфейса или класса, который не определен как запечатанный, а другие классы могут наследовать от этого класса и переопределять виртуальные методы.

Типы литеральных значений

В C# литеральные значения получают тип от компилятора. Можно задать, как числовой литерал должен быть типизирован, путем добавления буквы в конце номера. Например, чтобы задать, что значение 4,56 должно обрабатываться как число с плавающей запятой, добавьте после номера "f" или "F": 4.56f. При отсутствии добавленной буквы компилятор определит тип для литерала.

Литералы являются типизированными и все типы в конечном счете являются производными от System.Object.

Неявные типы, анонимные типы и типы, допускающие значение null

Как уже говорилось ранее, можно неявно типизировать локальную переменную (но не члены класса) с помощью ключевого слова var. Переменная все же получает тип во время компиляции, но тип предоставляется компилятором. Дополнительные сведения см. в разделеНеявно типизированные локальные переменные (Руководство по программированию в C#).

В некоторых случаях неудобно создавать именованный тип для простых наборов связанных значений, которые не будут сохранены или переданы за пределы метода. Для этой цели можно создать анонимные типы. Дополнительные сведения см. в разделе Анонимные типы (Руководство по программированию в C#).

Обычные типы значений не могут иметь значение null. Однако можно создать типы значений, допускающие значение NULL, путем привязки ? после типа. Например, int? является типом int, который также может иметь значениеnull. В CTS типы, допускающие значения NULL, являются экземплярами универсального типа структурыSystem.Nullable<T>. Типы, допускающие значение NULL, особенно полезны при передаче данных в базы данных и из них, в которых числовые значение могут быть равны NULL. Дополнительные сведения см. в разделеТипы, допускающие значения NULL (руководство по программированию на C#).

Вопрос № 7