处理包含流的派生流

时间:2017-10-20 16:58:00

标签: c# stream dispose idisposable

我有以下来自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来实现这一点了吗?

还有其他不那么复杂的方法可以解决这个问题,因为这需要我一段时间来理解。

1 个答案:

答案 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)
{
}