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

11. Процедуры и функции. Массивы. Утверждения о массивах. Записи. Файлы (продолжение 1).

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

[атрибуты] ]модификаторы] struct имя_структуры [:интерфейсы] {

конструктор () {}

тип_элемента_структуры имя_ элемента1; ип_элемента_структуры имя_ элемента2; ... тип_элемента_структуры имя_ элементаN; }

Имя_элемента может быть именем переменной или именем функции.

Для обращения к отдельным элементам структуры используется оператор . (точка). Доступ к элементам структуры может иметь следующее формальное описание: имя_структуры имя_переменной_структуры1;

имя_структуры[] имя_переменной_структуры2 =

new имя_структуры[размерность];

// Доступ к элементу структуры

имя_переменной_структуры1.элемент_структуры1= значение1; имя_переменной_структуры2[индекс].элемент_структуры1=значение2;

Язык C# позволяет создавать переменные типы структуры двумя способами: с применением оператора new- в этом случае объявление переменной типа структуры идентично объявлению переменной типа класса и при объявлении переменной возможна одновременная инициализация полей структуры; обычным объявлением переменной как для любого размерного типа.

Смысл последовательного доступа к файлам заключается в том, что в каждый момент времени доступна лишь одна компонента из всей последователь ности. Для того, чтобы обратиться (получить доступ) к компоненте с номером К, необходимо просмотреть от начала файла К-1 предшествующую компоненту. После обращения к компоненте с номером К можно обращаться к компоненте с номером К+1. Отсюда следует, что процессы формирования (записи) компонент файла и просмотра (чтения) не могут произвольно чередоваться. Таким образом, файл вначале строится при помощи после довательного добавления компонент в конец, а затем может последова тельно просматриваться от начала до конца.

Рассмотренные ранее средства работы с файлами обеспечивают после довательный доступ.

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

Прямой доступ предполагает, что файл представляет собой линейную последовательность блоков. Если файл содержит n блоков, то они нумеруются от 1 через 1 до n. Кроме того, вводится понятие условной границы между блоками, при этом условная граница с номером 0 расположена перед блоком с номером 1, граница с номером 1 расположена перед блоком с номером 2 и, наконец, условная граница с номером n находится после блока с номером n.

Реализация прямого доступа осуществляется с помощью функций и процедур FileSize, FilePos, Seek и Truncate.

Функция FileSize( var f ): Longint возвращает количество блоков в открытом файле f.

Функция FilePos( var f ): Longint возвращает текущую позицию в файле f. Позиция в файле - это номер условной границы. Для только что открытого файла текущей позицией будет граница с номером 0. Это значит, что можно записать или прочесть блок с номером 1.

(есть продолжение)

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