Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Nyckelordet unsafe anger en osäker kontext som krävs för alla åtgärder som rör pekare. Mer information finns i Osäker kod och pekare.
C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.
Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.
Tips/Råd
Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.
unsafe Använd modifieraren i deklarationen av en typ eller medlem. Hela textmängden för typen eller medlemmen är en osäker kontext. Till exempel deklareras följande metod med unsafe modifieraren:
unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
// Unsafe context: can use pointers here.
}
Omfånget för den osäkra kontexten sträcker sig från parameterlistan till slutet av metoden, så du kan också använda pekare i parameterlistan:
unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}
Du kan också använda ett osäkert block för att aktivera användning av osäker kod i det här blocket. Till exempel:
unsafe
{
// Unsafe context: can use pointers here.
}
Om du vill kompilera osäker kod måste du ange kompilatoralternativet AllowUnsafeBlocks . Den vanliga språkkörningen kan inte verifiera osäker kod.
Note
Funktionen för förhandsgranskning av minnessäkerhet som är tillgänglig i C# 15 begränsar de åtgärder som kräver en unsafe kontext.
En unsafe kontext krävs inte längre för att skapa en pekare, instruktionen fixed , konvertera ett stackalloc uttryck till en pekare och använda sizeof på en ohanterad typ.
Endast åtgärder som har åtkomst till det riktade minnet, till exempel indirekt pekare, kräver fortfarande en unsafe kontext. Samma förhandsgranskning lägger också till ett unsafe(expression) formulär som upprättar en osäker kontext för ett enda uttryck, för positioner där ett unsafe block inte kan visas, till exempel en fältinitierare eller ett catch filter. Mer information finns i Osäkra uttryck. Förhandsgranskningen unsafe ger också modifieraren för en medlem en ny innebörd: kompilatorn identifierar den som att det är obligatoriskt att markera medlemmen som osäker. Uppringarens tillämpning av den skyldigheten har inte implementerats ännu, så att markera en medlem unsafe har för närvarande ingen effekt på dess uppringare. Mer information finns i Medlemmar som är osäkra på uppringaren.
Exempel
// 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
Språkspecifikation för C#
Mer information finns i Osäker kod i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.