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

11.Структуры

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

Структуры особенно удобны для работы с небольшим объемом данных, имеющих семантику значения. Хорошими примерами структур являются комплексные числа, точки в системе координат и пары ключ-значение в словаре. Ключевой особенностью таких структур данных является наличие нескольких переменных-членов, для которых не требуется использовать наследование или идентификацию на уровне ссылок и которые удобно реализовывать с использованием семантики значения, когда при присваивании копируется значение, а не ссылка.

Как описано в §4.1.4, доступные в C# простые типы, такие как int, double и bool, фактически являются структурами. Благодаря тому, что эти предопределенные типы являются структурами, в языке C# можно реализовывать новые «простые» типы при помощи переопределения структур и операторов. В конце этой главы приводится два примера таких типов (§11.4).

11.1Объявления структур

Объявление_структуры является объявлением_типа (§9.6), в котором объявляется новая структура:

объявление_структуры: атрибутынеобязательно модификаторы_структурынеобязательно partialнеобязательно struct идентификатор список_параметров_типанеобязательно интерфейсы_структурынеобязательно предложения_ограничений_параметров_типанеобязательно тело_структуры ;необязательно

Объявление_структуры состоит из необязательного набора атрибутов (§17), за которым следует необязательный набор модификаторов_структуры (§11.1.1), необязательный модификатор partial, ключевое слово struct, идентификатор, который указывает имя структуры, необязательная спецификация списка_параметров_типа (§10.1.3), необязательная спецификация интерфейсов_структуры (§11.1.2) ), необязательная спецификация конструкций_ограничений_для_параметров_типа (§10.1.5), тело_структуры (§11.1.4) и точка с запятой (необязательно).

11.1.1Модификаторы структуры

Объявление_структуры может включать последовательность модификаторов структуры:

модификаторы_структуры: модификатор_структуры модификатор_структуры модификаторы_структуры

модификатор_структуры: new public protected internal private

Включение одного модификатора в объявление структуры несколько раз приведет к возникновению ошибки времени выполнения.

Модификаторы объявления структуры имеют такое же действие, как модификаторы объявления класса (§10.1).

11.1.2Модификатор partial

Модификатор partial указывает, что объявление_структуры является объявлением частичного типа. Несколько частичных объявлений структуры с одним именем в едином пространстве имен или объявлении типа объединяются в одно объявление структуры с соблюдением правил, указанных в §10.2.

11.1.3Интерфейсы структуры

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

интерфейсы_структуры: : список_типов_интерфейса

Реализация интерфейсов рассматривается более подробно в §13.4.

11.1.4Тело структуры

Тело_структуры определяет членов структуры.

тело_структуры: { объявления_членов_структурынеобязательно }

11.2Члены структуры

К членам структуры относятся члены, включенные в объявления_членов_структуры и члены, унаследованные из System.ValueType.

объявления_элементов_структуры: объявление_элементов_структуры объявления_элементов_структуры объявление_элемента_структуры

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

За исключением различий, рассмотренных в §11.3, описания членов класса, содержащиеся в §10.3 — §10.14, справедливы и для членов структуры.

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