Obsolete 9 страница
Содержимое вновь выделенной памяти неопределенное. Инициализаторы выделения стека не допускаются в блоках catch или finally (§8.10). Не существует способ явного освобождения памяти, выделенной с помощью stackalloc. Все блоки выделенной стеку памяти, созданные во время выполнения члена функции, автоматически удаляются при возврате из члена функции. Это соответствует функции alloca, расширение, обычно встречающееся в реализациях C и C++. В этом примере using System; class Test static void Main() { инициализатор stackalloc используется в методе IntToString для выделения буфера размером 16 символов в стеке. Этот буфер автоматически удаляется при возврате метода. 18.9 Динамическое выделение памяти Кроме оператора stackalloc, C# не предоставляет предопределенные конструкции для управления памятью, не собираемой сборщиком мусора. Такие службы обычно предоставляются поддержкой библиотек классов или импортируются непосредственно из операционной системы. В следующем примере показано в классе Memory, как можно обратиться к функциям кучи операционной системы из C#: using System; public unsafe class Memory static int ph = GetProcessHeap(); // Private instance constructor to prevent instantiation. private Memory() {} // Allocates a memory block of the given size. The allocated memory is public static void* Alloc(int size) { // Copies count bytes from src to dst. The source and destination public static void Copy(void* src, void* dst, int count) { // Frees a memory block. public static void Free(void* block) { // Re-allocates a memory block. If the reallocation request is for a public static void* ReAlloc(void* block, int size) { // Returns the size of a memory block. public static int SizeOf(void* block) { // Heap API flags const int HEAP_ZERO_MEMORY = 0x00000008; // Heap API functions [DllImport("kernel32")] [DllImport("kernel32")] [DllImport("kernel32")] [DllImport("kernel32")] [DllImport("kernel32")] Пример использования класса Memory: class Test В этом примере выделяется 256 байт памяти через Memory.Alloc и блок памяти инициализируется значениями, возрастающими от 0 до 255. Затем размещается байтовый массив из 256 элементов и используется Memory.Copy для копирования содержимого блока памяти в байтовый массив. Наконец, этот блок памяти освобождается с помощью Memory.Free и содержимое байтового массива выводится на консоль. A. Комментарии к документации C# предоставляет программистам механизм документирования своего кода с помощью специального синтаксиса комментариев с XML-текстом. Комментарии в файлах исходного кода, имеющие определенный вид, могут быть использованы для управления инструментом создания XML из этих комментариев и элементов исходного кода, которым они предшествуют. Комментарии, использующие такой синтаксис, называются комментариями к документации. ///" \t "See documentation comment"Они должны непосредственно предшествовать пользовательскому типу (такому как класс, делегат или интерфейс) или члену (такому как поле, событие, свойство или метод). Инструмент создания XML называется генератором документации (таким генератором может быть, но не обязан, сам компилятор C#.) Производимый генератором документации вывод называется файлом документации. Файл документации используется в качестве входных данных для средства просмотра документации, инструмента для создания отображения сведений о типе и сопутствующей документации. Эта спецификация предлагает набор тегов для использования в комментариях к документации, но использование этих тегов не является обязательным, можно при желании использовать другие теги, если соблюдаются правила правильного XML. A.1 Введение Комментарии, имеющие специальный вид, могут быть использованы для управления инструментом создания XML из этих комментариев и элементов исходного кода, которым они предшествуют. Такие комментарии являются однострочными комментариями, начинающимися с трех косых черт (///), или комментариями с разделителями, начинающимися с косой черты и двух звездочек (/**). Они должны непосредственно предшествовать пользовательскому типу (такому как класс, делегат или интерфейс) или члену (такому как поле, событие, свойство или метод), который они комментируют. Разделы атрибутов (§17.2) считаются частью объявлений, так что комментарии к документации должны предшествовать атрибутам, примененным к типу или члену. Синтаксис: однострочный_комментарий_к_документации: комментарий_с_разделителями_к_документации: Если в однострочном_комментарии_к_документации символ пустого_пространства следует за символами /// в каждом из однострочных_комментариев_к_документации, примыкающих к текущему однострочному_комментарию_к_документации, то этот символ пустого_пространства не включается в XML-вывод. Если в комментарии_с_разделителями_к_документации; первый символ на второй строке, не являющийся символом пустого_пространства, является звездочкой;, и тот же порядок необязательных символов пустого_пространства; и символа звездочки; повторяется в начале каждой строки внутри комментария_с_разделителями_к_документации;, то эта повторяющаяся комбинация символов не включается в XML-вывод. Символы пустого_пространства; могут входить в эту комбинацию как до, так и после символа звездочки;. Пример: /// <summary>Class <c>Point</c> models a point in a two-dimensional Текст в комментариях к документации должен быть правильным согласно правилам XML (http://www.w3.org/TR/REC-xml). При неправильном XML создается предупреждение и файл документации будет содержать комментарий, сообщающий об ошибке.
|