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

时间:2009-06-02 11:58:46

标签: c# dispose filestream .net-1.1 using

这可能看起来像是一个愚蠢的问题,但我正在看这个,因为我听到有人声称你必须在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代码在这里有它并编译)

1 个答案:

答案 0 :(得分:9)

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

基本流类显式实现Dispose(),因此如果将流转换为IDisposeable(使用{}的那个),您将只看到Dispose()。

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

(通过Reflector获得所有这些)