我有以下来自stream的类:
public class EncryptedStream : Stream
{
private readonly SymmetricAlgorithm _engine;
private readonly CryptoStream _cryptoStream;
private readonly Stream _inputStream;
//Standard overrides of stream
}
我正在寻找一种方法来处理基类流以及此类中的所有流和资源。我已经阅读了一些关于dispose模式的内容,并且由于stream已经实现了IDisposable,我的想法是在这个类中处理我将执行以下操作:
protected override void Dispose(bool disposing)
{
if (disposing)
{
_engine.Dispose();
_cryptoStream.Dispose();
_inputStream.Dispose();
}
}
当处理基本流时应该调用它,因为基本流IDisposable调用Close()调用Dispose(true)。
这似乎有效,这种方法是否有任何缺陷?而且,我需要在If语句之后调用base.Dispose(disposing)吗?我不这么认为,因为基本上已经通过在基本流上调用Dispose来实现这一点了吗?
还有其他不那么复杂的方法可以解决这个问题,因为这需要我一段时间来理解。
答案 0 :(得分:1)
你拥有的是好的。无需调用Stream::Dispose(bool)
,它是一个空体的虚拟方法。
我还建议您保留此link handy,它列出了Dispose Pattern的许多注意事项和注意事项。
(从Stream.cs复制)
/// <summary>Releases the unmanaged resources used by the <see cref="T:System.IO.Stream" /> and optionally releases the managed resources.</summary>
/// <param name="disposing">
/// <see langword="true" /> to release both managed and unmanaged resources; <see langword="false" /> to release only unmanaged resources.</param>
[__DynamicallyInvokable]
protected virtual void Dispose(bool disposing)
{
}