Ключевое словоfixedнаходит еще одно применение при создании одномерных массивов фиксированного размера. В документации на C# такие массивы называются
Для создания буфера фиксированного размера служит следующая общая форма:
fixed
где
Для того чтобы стала очевиднее польза от буферов фиксированного размера, рассмотрим ситуацию, в которой программе ведения счетов, написанной на C++, требуется передать информацию о банковском счете. Допустим также, что учетная запись каждого счета организована так, как показано ниже.
Name
Строка длиной 80 байтов, состоящая из 8-разрядных символов в коде ASCII
Balance
Числовое значение типа double длиной 8 байтов
ID
Числовое значение типа long длиной 8 байтов
В программе на C++ каждая структура содержит массивName,тогда как в программе на C# в такой структуре хранится лишь ссылка на массив. Поэтому для правильного представления данных из этой структуры в C# требуется буфер фиксированного размера, как показано ниже.
// Использовать буфер фиксированного-размера. unsafe struct FixedBankRecord {
public fixed byte Name[80]; // создать буфер фиксированного размера public double Balance; public long ID;
}
Когда буфер фиксированного размера используется вместо массиваName,каждый экземпляр структурыFixedBankRecordбудет содержать все 80 байтов массиваName.Именно таким образом структура и организована в программе на C++. Следовательно, общий размер структурыFixedBankRecordокажется равным 96, т.е. сумме ее членов. Ниже приведена программа, демонстрирующая этот факт.
// Продемонстрировать применение буфера фиксированного размера, using System;