如何在.Net 1.1中的FileStream上实现IDisposable

phi*_*red 5 c# .net-1.1 dispose using filestream

这可能看起来像是一个问题,但我正在看这个,因为我听到有人声称你必须在FileStream上调用Close(),即使它在一个使用块中(并且他们有代码,其中调用Close())就在街区尽头).

我知道Close()意味着调用Dispose(),但我认为我看起来更深,因为这是.Net 1.1代码,我的大部分经验都是2.0.

令我印象深刻的是,FileStream的MSDN文档为.Net 2.0启用了Dispose()和Dispose(bool),但只为.Net 1.1启用了Dispose(bool).

我认为这可能是一个疏忽,所以我使用Reflector查看一个程序集 - 我也看到Dispose(bool),但没有Dispose().

它是否正确?如果是这样,这里的故事是什么?FileStream在一个使用块中工作 - 我认为它必须实现IDisposable,据我所知,它只声明Dispose().

是否有一些编译器魔法正在进行,或者我在某处错过了隐藏的Dispose()实现(可能是调用Dispose(true)或Dispose(false)?)

最后(没有双关语),你能否确认在使用块中使用FileStream的范围将在.Net 1.1中的范围出口处关闭流?

[编辑]

只是为了澄清,这是C#代码.我知道VB.Net在.Net 2.0之前没有得到using语句,但我的理解是C#在1.1中有它(我的1.1代码在这里有它并编译)

JMa*_*sch 9

它的实现有点搞笑,但它就在那里:FileStream的基类:System.IO.Stream实现了IDisposable(FileStream只是继承它).

基类流类显式地实现Dispose(),因此如果将流转换为IDisposeable(这是使用{}的方法),您将只看到Dispose().

Stream.Dispose()调用Stream.Close().

(通过Reflector获得所有这些)