Utilisation de – qu’advient-il de mon stream?

Peut-être que c’est une question sortingvalente, mais ça me dérange. Et ne criez pas avec louange s’il s’agit d’un doublon – j’ai essayé de chercher, mais il y a tellement de questions concernant l’utilisation qu’il m’a été difficile de trouver la réponse.

J’ai un code comme celui-ci:

using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication()) using (StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream("example.txt", FileMode.Create, ISF))) writeFile.WriteLine("Example"); 

Et mes questions sont les suivantes: qu’arrive-t-il à mon IsolatedStorageFileStream créé, lorsque StreamWriter est supprimé, tout en laissant l’utilisation? Sera-t-il également disposé?

Y a-t-il une différence par rapport à ce code:

 using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication()) using (IsolatedStorageFileStream stream = ISF.CreateFile("example.txt")) using (StreamWriter writeFile = new StreamWriter(stream)) writeFile.WriteLine("Example"); 

Merci d’avance.

Vous avez un constructeur pour StreamWriter (NET Framework 4.5 uniquement) qui permet de spécifier le boolean leaveOpen qui définit si votre instance leaveOpen propriétaire du stream sous-jacent ou non.

S’il n’est pas spécifié (comme dans votre exemple, ou pour les versions précédentes du framework), par défaut, il est false , donc la fermeture (ou la suppression) de l’instance ferme le stream sous-jacent.

Sauf si vous définissez le paramètre leaveOpen sur true, l’object StreamWriter appelle Dispose () sur l’object Stream fourni lorsque StreamWriter.Dispose est appelé.

Il n’y a donc pas de différence entre les deux codes que vous avez fournis.

Utilisez {} toujours! Cela améliore beaucoup l’intention de votre code. Votre code ressemble à:

 using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication()) { using (StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream("example.txt", FileMode.Create, ISF))) { writeFile.WriteLine("Example"); } } 

Vous pouvez alors voir que StreamWriter est exécuté dans le contexte de l’ISF. Si je comprends bien le fichier ISF, celui-ci ne doit pas être fermé lorsque Streamwriter ferme le fichier. Et vous pouvez ouvrir un autre fichier dans le bloc ISF.

Une fois qu’il a quitté le bloc using, Dispose est appelé.

using statement (référence C #)

L’instruction using appelle la méthode Dispose de la manière appropriée sur l’object, et (lorsque vous l’utilisez comme indiqué précédemment), l’object lui-même devient hors de scope dès l’appel de Dispose. Dans le bloc using, l’object est en lecture seule et ne peut pas être modifié ni réaffecté.

L’instruction using garantit que Dispose est appelé même si une exception se produit pendant que vous appelez des méthodes sur l’object.

Votre stream rest ouvert même si le rédacteur de stream est éliminé. Vous pouvez, par exemple, ouvrir un autre rédacteur de stream et continuer à écrire dans le stream.