unsafe (Справочник по C#)

Обновлен: Ноябрь 2007

Ключевое слово unsafe обозначает небезопасный контекст, необходимый для работы с указателями. Дополнительные сведения см. в разделе Небезопасный код и указатели (Руководство по программированию в C#).

Модификатор unsafe можно использовать в объявлении типа или члена. Таким образом, вся текстовая область типа или члена считается небезопасным контекстом. Например, в следующем примере показан метод, объявленный с модификатором unsafe:

unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
    // Unsafe context: can use pointers here.
}

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

unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}

Кроме того, можно использовать небезопасный блок, чтобы внутри него использовать небезопасный код. Пример.

unsafe
{
    // Unsafe context: can use pointers here.
}

Для компиляции небезопасного кода необходимо указать параметр компилятора /unsafe. Небезопасный код не проверяется средой CLR.

Пример

// compile with: /unsafe

class UnsafeTest
{
   // Unsafe method: takes pointer to int:
   unsafe static void SquarePtrParam(int* p)
   {
      *p *= *p;
   }

   unsafe static void Main()
   {
      int i = 5;
      // Unsafe method: uses address-of operator (&):
      SquarePtrParam(&i);
      Console.WriteLine(i);
   }
}
// Output: 25

Спецификация языка C#

Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:

  • 18 Небезопасный код

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Ключевые слова C#

Оператор fixed (Справочник по C#)

Небезопасный код и указатели (Руководство по программированию в C#)

Буферы фиксированного размера (Руководство по программированию на C#)

Другие ресурсы

Справочник по C#