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

18.7Буферы фиксированного размера

Буферы фиксированного размера используются для объявления «в стиле C» линейных массивов как членов структур, главным образом они полезны для связи с неуправляемыми API.

18.7.1Объявления буферов фиксированного размера

Буфер фиксированного размера является членом, представляющим хранилище для буфера фиксированной длины для переменных заданного типа. Объявление буфера фиксированного размера вводит один или более буферов фиксированного размера с заданным типом элементов. Буферы фиксированного размера допускаются только в объявлениях структур и могут быть только в небезопасных контекстах (§18.1).

объявление_члена_структуры: … объявление_буфера_фиксированного_размера

объявление_буфера_фиксированного_размера: атрибутынеобязательно модификаторы_буфера_фиксированного_размеранеобязательно fixed тип_элемента_буфера деклараторы_буфера_фиксированного_размера ;

модификаторы_буфера_фиксированного_размера: модификатор_буфера_фиксированного_размера модификатор_буфера_фиксированного_размера модификаторы_буфера_фиксированного_размера

модификатор_буфера_фиксированного_размера: new public protected internal private unsafe

тип_элемента_буфера: тип

деклараторы_буфера_фиксированного_размера: декларатор_буфера_фиксированного_размера декларатор_буфера_фиксированного_размера , деклараторы_буфера_фиксированного_размера

декларатор_буфера_фиксированного_размера: идентификатор [ константное_выражение ]

Объявление буфера фиксированного размера может включать набор атрибутов (§17), модификатор new (§10.2.2), допустимое сочетание из четырех модификаторов доступа (§10.2.3) и модификатор unsafe (§18.1). Атрибуты и модификаторы применяются ко всем членам, объявленным в объявлении буфера фиксированного размера. Является ошибкой, если один и тот же модификатор появляется несколько раз в объявлении буфера фиксированного размера.

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

Тип элемента буфера в объявлении буфера фиксированного размера указывает тип элемента буферов, введенных объявлением. Тип элемента буфера должен быть одним из предопределенных типов sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double или bool.

За типом элемента буфера следует список деклараторов буфера фиксированного размера, каждый из которых вводит новый член. Декларатор буфера фиксированного размера состоит из идентификатора, именующего член, за ним следует константное выражение, заключенное в лексемы [ и ]. Константное выражение указывает число элементов в члене, введенном этим декларатором буфера фиксированного размера. Тип константного выражения должен быть неявно преобразуемым к типу int, а значение должно быть ненулевым положительным целым числом.

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

Объявление буфера фиксированного размера, в котором объявлено несколько буферов фиксированного размера, эквивалентно нескольким объявлениям с объявлением одного буфера фиксированного размера с теми же атрибутами и типами элементов. Пример:

unsafe struct A { public fixed int x[5], y[10], z[100]; }

равнозначно

unsafe struct A { public fixed int x[5]; public fixed int y[10]; public fixed int z[100]; }

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