Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Déclare le début d’un Using
bloc et acquiert éventuellement les ressources système que le bloc contrôle.
Syntaxe
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Pièces
Terme | Définition |
---|---|
resourcelist |
Obligatoire si vous ne fournissez resourceexpression pas . Liste d’une ou de plusieurs ressources système que ce Using bloc contrôle, séparées par des virgules. |
resourceexpression |
Obligatoire si vous ne fournissez resourcelist pas . Variable de référence ou expression faisant référence à une ressource système à contrôler par ce Using bloc. |
statements |
Optionnel. Bloc d’instructions exécutées par le Using bloc. |
End Using |
Obligatoire. Met fin à la définition du Using bloc et supprime toutes les ressources qu’il contrôle. |
Chaque ressource du resourcelist
composant a la syntaxe et les parties suivantes :
resourcename As New resourcetype [ ( [ arglist ] ) ]
- ou -
resourcename As resourcetype = resourceexpression
composants resourcelist
Terme | Définition |
---|---|
resourcename |
Obligatoire. Variable de référence qui fait référence à une ressource système que le Using bloc contrôle. |
New |
Obligatoire si l’instruction Using acquiert la ressource. Si vous avez déjà acquis la ressource, utilisez la deuxième alternative de syntaxe. |
resourcetype |
Obligatoire. Classe de la ressource. La classe doit implémenter l’interface IDisposable . |
arglist |
Optionnel. Liste des arguments que vous passez au constructeur pour créer une instance de resourcetype . Consultez la Liste des paramètres. |
resourceexpression |
Obligatoire. Variable ou expression faisant référence à une ressource système répondant aux exigences de resourcetype . Si vous utilisez la deuxième alternative de syntaxe, vous devez acquérir la ressource avant de passer le contrôle à l’instruction Using . |
Remarques
Parfois, votre code nécessite une ressource non managée, telle qu’un handle de fichier, un wrapper COM ou une connexion SQL. Un Using
bloc garantit l’élimination d’une ou plusieurs ressources de ce type lorsque votre code est terminé avec eux. Cela les rend disponibles pour que d’autres codes soient utilisés.
Les ressources managées sont supprimées par le garbage collector .NET Framework (GC) sans code supplémentaire de votre part. Vous n’avez pas besoin d’un Using
bloc pour les ressources managées. Toutefois, vous pouvez toujours utiliser un Using
bloc pour forcer l’élimination d’une ressource managée au lieu d’attendre le garbage collector.
Un Using
bloc comporte trois parties : l’acquisition, l’utilisation et la suppression.
L’acquisition signifie créer une variable et l’initialiser pour faire référence à la ressource système. L’instruction
Using
peut acquérir une ou plusieurs ressources, ou vous pouvez acquérir exactement une ressource avant d’entrer le bloc et de le fournir à l’instructionUsing
. Si vous fournissezresourceexpression
, vous devez acquérir la ressource avant de passer le contrôle à l’instructionUsing
.L’utilisation signifie accéder aux ressources et effectuer des actions avec elles. Les instructions entre
Using
etEnd Using
représentent l’utilisation des ressources.La suppression signifie appeler la Dispose méthode sur l’objet dans
resourcename
. Cela permet à l’objet de mettre fin correctement à ses ressources. L’instructionEnd Using
supprime les ressources sous leUsing
contrôle du bloc.
Comportement
Un Using
bloc se comporte comme une Try
construction ...Finally
dans laquelle le Try
bloc utilise les ressources et le Finally
bloc les supprime. En raison de cela, le Using
bloc garantit l’élimination des ressources, quelle que soit la façon dont vous quittez le bloc. Cela est vrai même dans le cas d’une exception non gérée, à l’exception d’un StackOverflowException.
L’étendue de chaque variable de ressource acquise par l’instruction Using
est limitée au Using
bloc.
Si vous spécifiez plusieurs ressources système dans l’instruction Using
, l’effet est identique à celui que vous avez imbriqué Using
dans un autre.
Si resourcename
c’est Nothing
le cas, aucun appel n’est Dispose effectué et aucune exception n’est levée.
Gestion des exceptions structurées au sein d’un bloc using
Si vous devez gérer une exception qui peut se produire dans le Using
bloc, vous pouvez y ajouter une construction complèteTry
...Finally
Si vous devez gérer le cas où l’instruction Using
n’a pas réussi à acquérir une ressource, vous pouvez tester si c’est le cas resourcename
Nothing
.
Gestion des exceptions structurées au lieu d’un bloc d’utilisation
Si vous avez besoin d’un Try
contrôle plus fin sur l’acquisition des ressources, ou si vous avez besoin d’un code supplémentaire dans le Finally
bloc, vous pouvez réécrire le Using
bloc en tant que construction ...Finally
L’exemple suivant montre des squelettes Try
et Using
des constructions équivalentes à l’acquisition et à l’élimination de resource
.
Using resource As New resourceType
' Insert code to work with resource.
End Using
' For the acquisition and disposal of resource, the following
' Try construction is equivalent to the Using block.
Dim resource As New resourceType
Try
' Insert code to work with resource.
Finally
If resource IsNot Nothing Then
resource.Dispose()
End If
End Try
Remarque
Le code à l’intérieur du Using
bloc ne doit pas affecter l’objet dans resourcename
une autre variable. Lorsque vous quittez le Using
bloc, la ressource est supprimée et l’autre variable ne peut pas accéder à la ressource à laquelle elle pointe.
Exemple :
L’exemple suivant crée un fichier nommé log.txt et écrit deux lignes de texte dans le fichier. L’exemple lit également ce même fichier et affiche les lignes de texte :
Étant donné que les TextWriter classes implémentent TextReader l’interface IDisposable , le code peut utiliser Using
des instructions pour s’assurer que le fichier est correctement fermé après les opérations d’écriture et de lecture.
Private Sub WriteFile()
Using writer As System.IO.TextWriter = System.IO.File.CreateText("log.txt")
writer.WriteLine("This is line one.")
writer.WriteLine("This is line two.")
End Using
End Sub
Private Sub ReadFile()
Using reader As System.IO.TextReader = System.IO.File.OpenText("log.txt")
Dim line As String
line = reader.ReadLine()
Do Until line Is Nothing
Console.WriteLine(line)
line = reader.ReadLine()
Loop
End Using
End Sub