代码之家  ›  专栏  ›  技术社区  ›  philsquared

如何在中的FileStream上实现IDisposable。净值1.1

  •  5
  • philsquared  · 技术社区  · 17 年前

    这可能看起来像是一个无聊的问题,但我之所以看这个问题,是因为我听到有人声称你必须对FileStream调用Close(),即使它在一个正在使用的块中(而且他们有代码,其中Close()在块的末尾被调用)。

    我认为这可能是一个疏忽,所以我使用Reflector来查看一个程序集——在那里,我也看到了Handle(bool),但没有看到Dispose()。

    这是正确的吗?如果是这样,这里的故事是什么?FileStream在使用块中工作,我认为这意味着它必须实现IDisposable,据我所知,IDisposabble只声明了Dispose()。

    是否有一些编译器魔法正在发生,或者我是否在某个地方丢失了一个隐藏的Dispose()实现(可能是调用了Dispose(true)或Dispose(false))? )

    [编辑]

    1 回复  |  直到 17 年前
        1
  •  9
  •   JMarsch    17 年前

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

    基流类显式实现了Dispose(),因此只有当你将流转换为IDisposeable时(这就是使用{}所做的),你才会看到Dispose()。

    流。Dispose()调用Stream。关闭()。

    (所有这些都是通过Reflector获得的)