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#.

Vedi anche