2017-10-20 74 views
0

我從流得到以下類:處理含衍生流流

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來正確完成了嗎?

有沒有其他更簡單的方法去處理這個處置,因爲這花了我一段時間才明白。

回答

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