Это меняется, Stream
по умолчанию не вызывает Flush()
в методе Dispose
с несколькими исключениями, такими как FileStream
. Причина этого заключается в том, что некоторым объектам потока не требуется вызов Flush
, поскольку они не используют буфер. Некоторые, такие как MemoryStream
, явно переопределяют метод, чтобы гарантировать, что никакие действия не предпринимаются (что делает его недоступным).
Это означает, что если вы не хотите иметь дополнительный вызов, вам следует проверить, реализует ли используемый вами подкласс Stream
метод в методе Dispose
и нужен ли он или нет.
Несмотря на это, в любом случае, было бы неплохо назвать его просто для удобства чтения - подобно тому, как некоторые люди называют Close()
в конце своих операторов использования:
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();
}