Cela varie, Stream
par défaut n'appelle pas Flush()
dans le Dispose
à quelques exceptions près, telles que FileStream
. La raison en est que certains objets de flux n'ont pas besoin d'appeler la fonction Flush
car ils n'utilisent pas de tampon. Certains, tels que MemoryStream
remplacer explicitement la méthode pour s'assurer qu'aucune action n'est entreprise (ce qui en fait un no-op).
En d'autres termes, si vous préférez ne pas avoir d'appel supplémentaire, vous devez vérifier si l'adresse de l'appelant est la même que celle de l'appelant. Stream
que vous utilisez met en œuvre l'appel dans le fichier Dispose
et si elle est nécessaire ou non.
Quoi qu'il en soit, il peut être judicieux de l'appeler quand même, juste pour la lisibilité - de la même manière que certaines personnes appellent Close()
à la fin de leurs déclarations d'utilisation :
using (FileStream fS = new FileStream(params))
using (CryptoStream cS = new CryptoStream(params))
using (BinaryWriter bW = new BinaryWriter(params))
{
doStuff();
//from here it's just readability/assurance that things are properly flushed.
bW.Flush();
bW.Close();
cS.Flush();
cS.Close();
fS.Flush();
fS.Close();
}