unsafe (référence C#)
Le mot clé unsafe
désigne un contexte non sécurisé, qui est requis pour toute opération impliquant des pointeurs. Pour plus d’informations, consultez Pointeurs et code unsafe.
Vous pouvez utiliser le modificateur unsafe
dans la déclaration d’un type ou d’un membre. Toute l’étendue de texte du type ou du membre est ainsi considérée comme un contexte unsafe. Par exemple, ce qui suit est une méthode déclarée avec le modificateur unsafe
:
unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
// Unsafe context: can use pointers here.
}
La portée du contexte unsafe s’étend de la liste de paramètres à la fin de la méthode, de sorte que les pointeurs peuvent également être utilisés dans la liste de paramètres :
unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}
Vous pouvez également avoir recours à un bloc unsafe pour utiliser un code unsafe dans ce bloc. Par exemple :
unsafe
{
// Unsafe context: can use pointers here.
}
Pour compiler du code unsafe, vous devez spécifier l’option de compilateur AllowUnsafeBlocks. Le code unsafe n’est pas vérifiable par le service CLR (Common Language Runtime).
Exemple
// 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
spécification du langage C#
Pour plus d’informations, voir Code unsafe dans la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.