unsafe (Riferimenti per C#)
La parola chiave unsafe
denota un contesto unsafe, necessario per qualsiasi operazione che interessa i puntatori. Per altre informazioni, vedere Codice unsafe e puntatori.
È possibile usare il modificatore unsafe
nella dichiarazione di un tipo o di un membro. L'intera estensione testuale del tipo o membro viene pertanto considerato come contesto unsafe. Ad esempio, il seguente è 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 di parametri alla fine del metodo, in modo tale che i puntatori possano essere usati anche nell'elenco dei parametri:
unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}
È anche possibile usare un blocco unsafe per consentire l'uso di un codice unsafe all'interno del blocco. Ad esempio:
unsafe
{
// Unsafe context: can use pointers here.
}
Per compilare codice non sicuro, è necessario specificare l'opzione del compilatore AllowUnsafeBlocks. Il codice unsafe non è verificabile 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 altre informazioni, vedere Codice di tipo unsafe nella specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.