unsafe (odwołanie w C#)unsafe (C# Reference)

Słowo kluczowe unsafe oznacza niebezpieczny kontekst, który jest wymagany dla każdej operacji obejmującej wskaźniki.The unsafe keyword denotes an unsafe context, which is required for any operation involving pointers. Aby uzyskać więcej informacji, zobacz artykuł niebezpieczny kod i wskaźniki.For more information, see Unsafe Code and Pointers.

Można użyć modyfikatora unsafe w deklaracji typu lub elementu członkowskiego.You can use the unsafe modifier in the declaration of a type or a member. Cały tekstowy zakres typu lub elementu członkowskiego jest traktowany jako niebezpieczny kontekst.The entire textual extent of the type or member is therefore considered an unsafe context. Na przykład poniżej przedstawiono metodę zadeklarowaną z modyfikatorem 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.
}

Zakres niebezpiecznego kontekstu rozciąga się od listy parametrów na koniec metody, dlatego na liście parametrów można również używać wskaźników: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 ) {...}

Można również użyć niebezpiecznego bloku, aby umożliwić użycie niebezpiecznego kodu wewnątrz tego bloku.You can also use an unsafe block to enable the use of an unsafe code inside this block. Na przykład:For example:

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

Aby skompilować niebezpieczny kod, należy określić opcję kompilatora -unsafe .To compile unsafe code, you must specify the -unsafe compiler option. Kod niebezpieczny nie jest możliwy do zweryfikowania przez środowisko uruchomieniowe języka wspólnego.Unsafe code is not verifiable by the common language runtime.

PrzykładExample

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

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz artykuł niebezpieczny kod w C# specyfikacji języka.For more information, see Unsafe code in the C# Language Specification. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.The language specification is the definitive source for C# syntax and usage.

Zobacz takżeSee also