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
Riferimenti
Istruzione fixed (Riferimenti per C#)
Codice unsafe e puntatori (Guida per programmatori C#)
Buffer a dimensione fissa (Guida per programmatori C#)