C# 处理包含流的派生流
我从stream派生了以下类:C# 处理包含流的派生流,c#,stream,dispose,idisposable,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 } 我正在寻找一种方法来处理基流以及
public class EncryptedStream : Stream
{
private readonly SymmetricAlgorithm _engine;
private readonly CryptoStream _cryptoStream;
private readonly Stream _inputStream;
//Standard overrides of stream
}
我正在寻找一种方法来处理基流以及这个类中的所有流和资源。我已经读了一些关于dispose模式的内容,由于stream已经实现了IDisposable,我的想法是在这个类中进行dispose,我将执行以下操作:
protected override void Dispose(bool disposing)
{
if (disposing)
{
_engine.Dispose();
_cryptoStream.Dispose();
_inputStream.Dispose();
}
}
这应该在处理基流时调用,因为基流IDisposable调用Close(),后者调用Dispose(true)
这似乎是可行的,这种方法有什么缺点吗?还有,我是否需要在If语句之后调用base.Dispose(disposing)?我不这么认为,因为在基本流上调用Dispose基本上已经完成了,对吗
我花了一段时间才明白,还有没有其他不那么复杂的方法来处理这个问题。你所拥有的一切都是好的。无需调用
流::Dispose(bool)
,它是一个具有空主体的虚拟方法
我也建议你保留这个,它列出了很多你应该做和不应该做的事情
(从Stream.cs复制)
///释放所使用的非托管资源,并可以选择释放托管资源。
///
///释放托管和非托管资源;仅释放非托管资源。
[[uuuu动态调用可禁用]
受保护的虚拟void Dispose(bool disposing)
{
}
/// <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)
{
}