using, instruction (référence C#)using statement (C# Reference)

Fournit une syntaxe pratique qui garantit l’utilisation correcte d’objets IDisposable.Provides a convenient syntax that ensures the correct use of IDisposable objects.

ExempleExample

L’exemple suivant montre comment utiliser l’instruction using.The following example shows how to use the using statement.

using (var font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

À partir C# de 8,0, vous pouvez utiliser la syntaxe alternative suivante pour l’instruction using qui ne requiert pas d’accolades :Beginning with C# 8.0, you can use the following alternative syntax for the using statement that doesn't require braces:

using var font1 = new Font("Arial", 10.0f);
byte charset = font1.GdiCharSet;

NotesRemarks

File et Font sont des exemples de types managés qui accèdent à des ressources non managées (dans le cas présent, des handles de fichiers et des contextes d’appareil).File and Font are examples of managed types that access unmanaged resources (in this case file handles and device contexts). Beaucoup d’autres types de ressources non managées et de bibliothèques de classes peuvent les encapsuler.There are many other kinds of unmanaged resources and class library types that encapsulate them. Tous les types de cette sorte doivent implémentent l’interface IDisposable.All such types must implement the IDisposable interface.

Quand la durée de vie d’un objet IDisposable est limitée à une seule méthode, vous devez le déclarer et l’instancier dans l’instruction using.When the lifetime of an IDisposable object is limited to a single method, you should declare and instantiate it in the using statement. L’instruction using appelle la méthode Dispose correctement sur l’objet et, quand vous l’utilisez comme indiqué précédemment, elle met également l’objet lui-même hors de portée dès que Dispose est appelée.The using statement calls the Dispose method on the object in the correct way, and (when you use it as shown earlier) it also causes the object itself to go out of scope as soon as Dispose is called. Dans le bloc using, l’objet est en lecture seule et ne peut être ni modifié ni réassigné.Within the using block, the object is read-only and cannot be modified or reassigned.

L’instruction using garantit que Dispose est appelée même si une exception se produit dans le bloc using.The using statement ensures that Dispose is called even if an exception occurs within the using block. Vous pouvez obtenir le même résultat en plaçant l’objet dans un bloc try, puis en appelant Dispose dans un bloc finally ; c’est d’ailleurs ainsi que l’instruction using est traduite par le compilateur.You can achieve the same result by putting the object inside a try block and then calling Dispose in a finally block; in fact, this is how the using statement is translated by the compiler. L’exemple de code précédent se développe pour donner le code suivant au moment de la compilation (notez les accolades supplémentaires pour créer la portée limitée de l’objet) :The code example earlier expands to the following code at compile time (note the extra curly braces to create the limited scope for the object):

{
  var font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

La plus récente syntaxe d’instruction using se traduit par un code très similaire.The newer using statement syntax translates to very similar code. Le bloc try s’ouvre à l’emplacement où la variable est déclarée.The try block opens where the variable is declared. Le bloc finally est ajouté à la fermeture du bloc englobant, en général à la fin d’une méthode.The finally block is added at the close of the enclosing block, typically at the end of a method.

Pour plus d’informations sur l’instruction try-finally, consultez la rubrique try-finally.For more information about the try-finally statement, see the try-finally topic.

Vous pouvez déclarer plusieurs instances d’un type dans l’instruction using, comme indiqué dans l’exemple suivant :Multiple instances of a type can be declared in the using statement, as shown in the following example:

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

Vous pouvez combiner plusieurs déclarations du même type à l’aide de la nouvelle syntaxe C# introduite avec 8 également.You can combine multiple declarations of the same type using the new syntax introduced with C# 8 as well. Ceci est illustré dans l'exemple suivant :This is shown in the following example:

using Font font3 = new Font("Arial", 10.0f), 
    font4 = new Font("Arial", 10.0f);
// Use font3 and font4.

Il n’est pas recommandé d’instancier l’objet de ressource, puis de passer la variable à l’instruction using.You can instantiate the resource object and then pass the variable to the using statement, but this is not a best practice. Dans ce cas, une fois que le contrôle a quitté le bloc using, l’objet reste dans la portée mais n’a probablement pas accès à ses ressources non managées.In this case, after control leaves the using block, the object remains in scope but probably has no access to its unmanaged resources. En d’autres termes, il n’est plus complètement initialisé.In other words, it's not fully initialized anymore. Si vous essayez d’utiliser l’objet à l’extérieur du bloc using, vous risquez de provoquer la levée d’une exception.If you try to use the object outside the using block, you risk causing an exception to be thrown. C’est pourquoi il est généralement préférable d’instancier l’objet dans l’instruction using et de limiter sa portée au bloc using.For this reason, it's generally better to instantiate the object in the using statement and limit its scope to the using block.

var font2 = new Font("Arial", 10.0f);
using (font2) // not recommended
{
    // use font2
}
// font2 is still in scope
// but the method call throws an exception
float f = font2.GetHeight();

Pour plus d’informations sur la suppression d’objets IDisposable, consultez Utilisation d’objets qui implémentent IDisposable.For more information about disposing of IDisposable objects, see Using objects that implement IDisposable.

spécification du langage C#C# language specification

Pour plus d’informations, consultez Instruction using dans la spécification du langage C#.For more information, see The using statement in 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