using, instruction (référence C#)
Fournit une syntaxe qui garantit l'utilisation correcte d'objets IDisposable.
Exemple
L'exemple suivant montre comment utiliser l'instruction using.
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
Notes
File et Font sont des exemples des types managés qui accèdent aux ressources non managées (dans ce cas, des handles de fichiers et des contextes de périphérique). Beaucoup d'autres types de ressources non managées et de bibliothèques de classes peuvent les encapsuler. Tous doivent implémenter l'interface IDisposable.
En règle générale, lorsque vous utilisez un objet IDisposable, vous devez le déclarer et l'instancier dans une instruction using. L'instruction using appelle la méthode Dispose sur l'objet et, si vous l'utilisez comme indiqué précédemment, met l'objet hors de portée dès que Dispose est appelé. Dans le bloc using, l'objet est en lecture seule et ne peut être ni modifié ni réassigné.
L'instruction using garantit que Dispose est appelé même si une exception se produit lors de l'appel de méthodes sur l'objet. 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. L'exemple de code précédent se développe vers le code suivant à la compilation (notez les accolades supplémentaires qui limitent la portée de l'objet) :
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
Plusieurs instances d'un type peuvent être déclarées dans une instruction using, comme indiqué dans l'exemple suivant.
using (Font font3 = new Font("Arial", 10.0f),
font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}
Il n'est pas conseillé d'instancier l'objet de ressource puis de passer la variable à l'instruction using. En effet, l'objet reste dans la portée une fois que le contrôle a quitté le bloc using, même s'il ne peut probablement plus accéder à ses ressources non managées. En d'autres termes, il ne sera plus complètement initialisé. Si vous essayez d'utiliser l'objet à l'extérieur du bloc using, vous risquez de provoquer la levée d'une exception. C'est pourquoi il vaut mieux instancier l'objet dans l'instruction using et limiter sa portée au bloc using.
Font 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();
Spécification du langage C#
Pour plus d'informations, consultez 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.
Voir aussi
Référence
using, directive (référence C#)
Implémentation des méthodes Finalize et Dispose pour nettoyer des ressources non managées
Concepts
Implémentation d'une méthode Dispose