处理含衍生流流

问题描述:

我从流得到以下类:处理含衍生流流

public class EncryptedStream : Stream 
{ 
    private readonly SymmetricAlgorithm _engine; 
    private readonly CryptoStream _cryptoStream; 
    private readonly Stream _inputStream; 

    //Standard overrides of stream 
} 

我正在寻找一种方法来处理基本流和这个类中的所有流和资源。我已阅读有关Dispose模式了一下,因为流已经实现了IDisposable,我的想法是在这个类来处理我会做到以下几点:

protected override void Dispose(bool disposing)   
{ 
    if (disposing) 
    { 
     _engine.Dispose(); 
     _cryptoStream.Dispose(); 
     _inputStream.Dispose(); 
    } 
} 

,因为基本流的处置时,这应被调用基础流IDisposable调用Close(),它调用Dispose(true)。

这似乎工作,这种方法有没有什么不足?还有,我是否需要在If语句之后调用base.Dispose(disposing)?我不这么认为,因为基本上已经通过在基础流上调用Dispose来正确完成了吗?

有没有其他更简单的方法去处理这个处置,因为这花了我一段时间才明白。

你有什么好。不需要调用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) 
{ 
}