| Операция или ключевое слово | Описание |
|---|---|
| * | Используется для создания |
| & | Используется для получения адреса переменной в памяти |
| –› | Используется для доступа к полям типа, представленным указателем (небезопасная версия операции, обозначаемой в C# точкой) |
| [] | Операция [] (в небезопасном контексте) позволяет индексировать элемент, на который указывает переменная указателя. (Обратите внимание на аналогию между переменной указателя и операцией [] в C(++).) |
| ++, -- | В небезопасном контексте к типам указателя могут применяться операции приращения и отрицательного приращения |
| +, - | В небезопасном контексте к типам указателя могут применяться операции сложения и вычитания |
| ==, !=, <, >, <=, >= | В небезопасном контексте к типам указателя могут применяться операции сравнения и проверки на тождественность |
| stackalloc | В небезопасном контексте можно использовать ключевое слово stackalloc, чтобы размещать массивы C# в стеке |
| fixed | В небезопасном контексте можно использовать ключевое слово fixed |
Перед рассмотрением деталей позвольте заметить, что необходимость в использовании типов указателя возникает
• Вы стремитесь оптимизировать работу определенных частей своего приложения путем непосредственной манипуляции памятью вне пределов управления CLR.
• Вы хотите использовать методы C-библиотеки *.dll или COM-сервера, требующие ввода указателей в виде параметров.
Если вы решите использовать указанную возможность языка C#, необходимо информировать csc.exe об этих намерениях, указав разрешение для проекта поддерживать "небезопасный программный код". Чтобы сделать это с командной строки компилятора C# (csc.exe), просто укажите в качестве аргумента флаг /unsafe. В Visual Studio 2005 вы должны перейти на страницу свойств проекта и активизировать опцию Allow Unsafe Code (Разрешать использование небезопасного программного кода) на вкладке Build (рис. 9.4).
Рис. 9.4. Разрешение небезопасного программного кода Visual Studio 2005
В следующих примерах предполагается, что вы имеете опыт работы с указателями в C(++). Если это не так, не слишком отчаивайтесь. Подчеркнем еще раз, что создание небезопасного программного кода не является типичной задачей в большинстве приложений .NET. Если вы хотите работать с указателями в C#, то должны специально объявить блок программного кода "небезопасным", используя для этого ключевое слово unsafe (как вы можете догадаться сами, весь программный код, не обозначенный ключевым unsafe, автоматически считается "безопасным").
unsafe {
// Операторы для работы с указателями.
}
Кроме объявления контекста небезопасного программного кода, вы можете строить "небезопасные" структуры, классы, члены типов и параметры. Вот несколько примеров, на которые следует обратить внимание.
// Вся эта структура является 'небезопасной'