【发布时间】:2011-04-29 18:40:40
【问题描述】:
我有一个类管理对二进制文件的访问。我想在第一次请求时打开这个文件,然后保持打开状态,直到我的类的实例被释放。我已经这样实现了:
public class SomeService : IDisposable
{
private BinaryReader _reader;
public int ServiceFunction(...)
{
if (_reader == null)
CreateReader();
// Do something with _reader and return a result
}
private void CreateReader()
{
var stream = new FileStream("myFile", FileMode.Open, FileAccess.Read);
_reader = new BinaryReader(stream);
}
public void Dispose()
{
if (_reader != null)
_reader.Dispose();
}
}
然后我会这样使用这个类:
using (var service = new SomeService())
{
foreach (var item in someList)
{
// other stuff
if (eventuallyTrue)
{
int result = service.ServiceFunction(item.SomeProperty);
// other stuff
}
}
}
问题:
- 调用
_reader.Dispose()是否足够,或者是否还需要显式处理 FileStream? -
如果我也需要处理 FileStream,我可以像这样修改
Dispose方法吗:public void Dispose() { if (_reader != null) { if (_reader.BaseStream != null) _reader.BaseStream.Dispose(); _reader.Dispose(); // Does the order of disposing matter here ? } } 或者我需要将
FileStream保存在一个单独的类变量private FileStream _stream中,然后再处理这个流吗?
【问题讨论】: