unsafe (Riferimenti per C#)

Aggiornamento: novembre 2007

La parola chiave unsafe denota un contesto unsafe, che è richiesto per qualsiasi operazione che comporti l'uso dei puntatori. Per ulteriori informazioni, vedere la classe Codice unsafe e puntatori (Guida per programmatori C#).

È possibile utilizzare il modificatore unsafe nella dichiarazione di un tipo o di un membro. L'intero ambito testuale del tipo o del membro viene pertanto considerato un contesto unsafe. Di seguito è ad esempio riportato un metodo dichiarato con il modificatore unsafe:

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

L'ambito del contesto unsafe si estende dall'elenco dei parametri fino alla fine del metodo. In questo modo, è possibile utilizzare puntatori anche nell'elenco dei parametri.

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

È anche possibile utilizzare un blocco unsafe per consentire l'uso di un codice unsafe all'interno del blocco. Di seguito è riportato un esempio:

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

Per compilare codice unsafe, è necessario specificare l'opzione del compilatore /unsafe. Il codice unsafe non può essere verificato da Common Language Runtime.

Esempio

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

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 18 Codice unsafe

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Parole chiave di C#

Istruzione fixed (Riferimenti per C#)

Codice unsafe e puntatori (Guida per programmatori C#)

Buffer a dimensione fissa (Guida per programmatori C#)

Altre risorse

Riferimenti per C#