Simple question de débutant en VB.Net et ancien programmeur confirmé VB6, à quoi sert exactement le mot-clé Using dans VB.net ? J'ai rien trouvé de vraiment explicit sur le net à ce sujet !
![]()
Simple question de débutant en VB.Net et ancien programmeur confirmé VB6, à quoi sert exactement le mot-clé Using dans VB.net ? J'ai rien trouvé de vraiment explicit sur le net à ce sujet !
![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
http://www.developpez.net/forums/sho....php?t=1327868
Voir le post de DotNetMatt![]()
En gros, ça sert à ce que la méthode Dispose soit appelée automatiquement sur l'objet à la fin du bloc, même en cas d'erreur. Par exemple si tu écris ça :
Le compilateur le transforme en quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Using s As Stream = OuvrirFichier() ' blabla End Using
(c'est pas tout à fait ça, mais c'est le principe)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Dim s As Stream Try s = OuvrirFichier() ' blabla Finally If s IsNot Nothing Then s.Dispose() End If End Try
C'est donc un moyen simple de s'assurer qu'une ressource (fichier, connection DB, etc) soit bien libérée à la fin d'un bloc.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Dans le cas d'utilisation d'un fichier par exemple ou tout autre flux qui doit être ouvert, ce bloc permet la fermeture automatique ? D'après les exemples que je vois un peu partout et même sur la MSDN, il font l'ouverture mais pas la fermeture, est-ce correct ?
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
en théorie il faudrait regarder le code pour savoir (le framework est codé en .net, et le .net est décompilable)
mais en effet dans tous les cas que j'ai vu, la méthode Dispose appelle les méthodes de fermeture
par exemple pour les DbConnection, la méthode Dispose appelle la méthode Close, ca ferme donc la connexion avant de libérer la mémoire non managée
donc avec le using on est en théorie sûr de fermer la connexion en sortie de bloc, et même en cas d'erreur
Oui c'est ça
Oui, la fermeture est implicite si le fichier est ouvert dans une instruction Using
Pas entièrement
Par exemple si tu regardes la classe string avec Reflector ou un autre décompileur, tu verras qu'il y a beaucoup de méthodes "extern" avec le flag MethodImplOptions.InternalCall : elles sont implémentées en code natif au niveau du CLR
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Okc'est tout ce que je voulais savoir
![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Partager