这可能看起来像一个诺迪的问题,但我一直在寻找这一点,因为我听到有人声称必须调用Close()上一个FileStream,即使是在使用块(和他们的代码,其中关闭()被在所述块的端部)称为右

我知道,关闭()是指调用Dispose(),但我想我会看的更深一些,因为这是NET 1.1的代码,以及我的经验,大部分已与2.0。

有一件事情,让我吃惊的是,为的FileStream MSDN文档具有的Dispose()和处置(布尔)为.Net的2.0,但只处置(布尔)为NET 1.1。

我想这可能是一个疏忽,所以我使用反射来看看组装 - 有过,我看到的Dispose(布尔),但没有的Dispose()

这是正确的吗?如果是这样,这里有什么故事吗?的FileStream工作在一个使用块 - 而且我认为他的意思,必须实现IDisposable它,就我所知,只有声明的Dispose()

有一些编译器魔法回事,还是我失去了一个隐藏实现的Dispose()的地方(这,想必,调用Dispose(真)或Dispose(假)?)

最后(无双关),可以确认,在使用块将在NET 1.1收范围出口流范围界定一个FileStream?

[编辑]

只是为了澄清,这是C#代码。据我所知,VB.Net没有得到using语句,直到NET 2.0,但我的理解是,C#有它在1.1(和我的1.1代码在这里有它在,它编译)

有帮助吗?

解决方案

它实现了一个有点滑稽,但它的存在: 对的FileStream基类:System.IO.Stream实现IDisposable(的FileStream只是继承它)

在基本流类实现的Dispose()明确,所以你只能看到的Dispose()如果投射的流作为IDisposeable(这是使用{}什么一样)。

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

(得到这个所有经由反射器)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top