unsafe (Referencia de C#)unsafe (C# Reference)

La palabra clave unsafe denota un contexto no seguro, que es necesario para realizar cualquier operación que implique punteros.The unsafe keyword denotes an unsafe context, which is required for any operation involving pointers. Para obtener más información, vea Unsafe Code and Pointers (Código no seguro y punteros [Guía de programación de C#]).For more information, see Unsafe Code and Pointers.

Puede usar el codificador unsafe en la declaración de un tipo o miembro.You can use the unsafe modifier in the declaration of a type or a member. Por consiguiente, toda la extensión textual del tipo o miembro se considera un contexto no seguro.The entire textual extent of the type or member is therefore considered an unsafe context. Por ejemplo, el siguiente método se declara con el modificador unsafe:For example, the following is a method declared with the unsafe modifier:

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

El ámbito del contexto no seguro se extiende desde la lista de parámetros hasta el final del método, por lo que también pueden usarse punteros en la lista de parámetros:The scope of the unsafe context extends from the parameter list to the end of the method, so pointers can also be used in the parameter list:

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

También puede usarse un bloque no seguro para habilitar el uso de código no seguro en el bloque.You can also use an unsafe block to enable the use of an unsafe code inside this block. Por ejemplo:For example:

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

Para compilar código no seguro, debe especificar la opción /unsafe del compilador.To compile unsafe code, you must specify the /unsafe compiler option. Common Language Runtime no puede comprobar el código no seguro.Unsafe code is not verifiable by the common language runtime.

EjemploExample

// 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

Especificación del lenguaje C#C# Language Specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee Also