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. Ta sama wersja zapoznawcza dodaje unsafe(expression) również formularz, który ustanawia niebezpieczny kontekst dla pojedynczego wyrażenia, w przypadku pozycji, w których unsafe nie można wyświetlić bloku, na przykład inicjatora pola lub filtru catch . Aby uzyskać więcej informacji, zobacz Niebezpieczne wyrażenia. Wersja zapoznawcza udostępnia unsafe również modyfikator członkowi nowe znaczenie: kompilator rozpoznaje go jako oznaczenie elementu członkowskiego wymaga niebezpiecznego. Egzekwowanie tego obowiązku przez osoby wywołujące nie zostało jeszcze wdrożone, dlatego oznaczenie członka unsafe nie ma obecnie wpływu na jego rozmówców. Aby uzyskać więcej informacji, zobacz Caller-niebezpieczne elementy członkowskie.

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