nem biztonságos (C# referencia)

A unsafe kulcsszó egy nem biztonságos környezetet jelöl, amely minden mutatót érintő művelethez szükséges. További információ: Nem biztonságos kód és mutatók.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

Használja a unsafe módosítót egy típus vagy tag deklarációjában. A típus vagy tag teljes szöveges terjedelme nem biztonságos környezet. A módosítóval unsafe például a következő metódus van deklarálva:

unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
    // Unsafe context: can use pointers here.
}

A nem biztonságos környezet hatóköre a paraméterlistától a metódus végéig terjed, így a paraméterlistában is használhat mutatókat:

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

A nem biztonságos blokkokkal is engedélyezheti a nem biztonságos kód használatát ebben a blokkban. Például:

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

A nem biztonságos kód fordításához meg kell adnia az AllowUnsafeBlocks fordítóbeállítást. A közös nyelvi futtatókörnyezet nem tudja ellenőrizni a nem biztonságos kódot.

Note

A C# 15-ben elérhető memóriabiztonsági előzetes funkció szűkíti a környezetet igénylő unsafe műveleteket. A unsafe továbbiakban nincs szükség környezetre a mutató, az fixed utasítás, a stackalloc kifejezés mutatóvá alakításához és nem felügyelt típushoz való használatához sizeof . Csak azok a műveletek igényelnek unsafe környezetet, amelyek hozzáférnek a mutatott memóriához, például a mutató indirekthez. Ugyanez az előzetes verzió egy unsafe(expression) olyan űrlapot is hozzáad, amely nem biztonságos környezetet hoz létre egyetlen kifejezéshez olyan pozíciókhoz, ahol unsafe nem jelenhet meg blokk, például mező inicializáló vagy catch szűrő. További információ: Nem biztonságos kifejezések. Az előzetes verzió egy tag módosítóját is új jelentéssel ruházza unsafe fel: a fordító felismeri, hogy a tag megjelölése nem biztonságos. Ennek a kötelezettségnek a hívó általi érvényesítése még nincs megvalósítva, ezért a tag unsafe megjelölése jelenleg nincs hatással a hívóira. További információ: Caller-unsafe members.

példa

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

C# nyelvspecifikáció

További információ: Nem biztonságos kód a C# nyelvi specifikációjában. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.

Lásd még