Si vous êtes venu dans un code C# comme celui-ci avec les déclarations imbriquées en utilisant/ressources:.NET - Remplaçant imbriquées en utilisant des énoncés unique à l'aide déclaration
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var reader = new BinaryReader(responseStream))
{
// do something with reader
}
}
}
Est-il sûr de le remplacer par quelque chose comme ça? L'exemple ci-dessus est juste un exemple de ressources jetables imbriquées, alors pardonnez-moi si ce n'est pas exactement l'utilisation correcte. Je suis curieux de savoir si vous disposez de la ressource la plus externe (le BinaryReader dans ce cas), si elle disposera récursivement ses enfants pour vous, ou si vous devez explicitement disposer chaque "couche" avec des instructions using séparées? Par exemple. Si vous disposez du BinaryReader, est-il censé disposer le flux de réponse, qui à son tour dispose de la réponse? En pensant à cette dernière phrase, je pense que vous avez réellement besoin des instructions using using séparées, parce qu'il n'y a aucun moyen de garantir qu'un objet wrapper disposerait de l'objet interne. Est-ce correct?
Vous en avez besoin, mais je ne pense pas qu'ils doivent être imbriqués. Je pense qu'ils peuvent simplement être empilés les uns sur les autres. –
@Matt: Oui, mais ils doivent tous les trois exister. –
'BinaryReader.Close' ferme le flux sous-jacent. Et puisque 'Stream.Close' finit par appeler' Stream.Dispose', il n'est pas nécessaire de fermer le flux après avoir fermé le lecteur. Voir http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.aspx et http://msdn.microsoft.com/en-us/library/system.io.stream.close.aspx . –