unsafe (référence C#)unsafe (C# Reference)

Le mot clé unsafe désigne un contexte non sécurisé, qui est requis pour toute opération impliquant des pointeurs.The unsafe keyword denotes an unsafe context, which is required for any operation involving pointers. Pour plus d’informations, consultez l’article Pointeurs et code unsafe.For more information, see Unsafe Code and Pointers.

Vous pouvez utiliser le modificateur unsafe dans la déclaration d’un type ou d’un membre.You can use the unsafe modifier in the declaration of a type or a member. Toute l’étendue de texte du type ou du membre est ainsi considérée comme un contexte unsafe.The entire textual extent of the type or member is therefore considered an unsafe context. Par exemple, ce qui suit est une méthode déclarée avec le modificateur unsafe :For example, the following is a method declared with the unsafe modifier:

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 :The scope of the unsafe context extends from the parameter list to the end of the method, so pointers can also be used in the parameter list:

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.You can also use an unsafe block to enable the use of an unsafe code inside this block. Exemple :For example:

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

Pour compiler du code unsafe, vous devez spécifier l’option de compilateur /unsafe.To compile unsafe code, you must specify the /unsafe compiler option. Le code unsafe n’est pas vérifiable par le service CLR (Common Language Runtime).Unsafe code is not verifiable by the common language runtime.

ExempleExample

// 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#C# Language Specification

Pour plus d'informations, voir la spécification du langage C#.For more information, see the C# Language Specification. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.The language specification is the definitive source for C# syntax and usage.

Voir aussiSee Also