niebezpieczne (odwołanie w C#)

Słowo unsafe kluczowe oznacza niebezpieczny kontekst, który jest wymagany dla każdej operacji obejmującej wskaźniki. Aby uzyskać więcej informacji, zobacz Niebezpieczny kod i wskaźniki.

Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.

Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.

Wskazówka

Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.

unsafe Użyj modyfikatora w deklaracji typu lub elementu członkowskiego. Cały zakres tekstowy typu lub elementu członkowskiego jest niebezpiecznym kontekstem. Na przykład następująca metoda jest zadeklarowana za pomocą unsafe modyfikatora:

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, dzięki czemu można również używać wskaźników na liście parametrów:

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

Możesz również użyć niebezpiecznego bloku, aby umożliwić korzystanie z niebezpiecznego kodu wewnątrz tego bloku. Przykład:

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

Aby skompilować niebezpieczny kod, należy określić opcję kompilatora AllowUnsafeBlocks . Środowisko uruchomieniowe języka wspólnego nie może zweryfikować niebezpiecznego kodu.

Note

Funkcja wersji zapoznawczej bezpieczeństwa pamięci dostępna w języku C# 15 zawęża operacje wymagające unsafe kontekstu. Kontekst unsafe nie jest już wymagany do tworzenia wskaźnika, fixed instrukcji, konwertowania stackalloc wyrażenia na wskaźnik i używania sizeof w typie niezarządzanym. Tylko operacje, które uzyskują dostęp do pamięci wskazywanej, na przykład pośredniej wskaźnika, nadal wymagają unsafe kontekstu. Późniejsza wersja zapoznawcza zmienia unsafe się również na elemencie członkowskim, aby oznaczyć go jako niebezpieczne, dlatego osoby wywołujące muszą używać elementu członkowskiego z unsafe kontekstu.

Przykład

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

Aby uzyskać więcej informacji, zobacz Niebezpieczny kod w specyfikacji języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz także