如果using一个FileStream,是否会隐含调用Close()?

a3r433 2014-03-19 09:41:02
FileStream如果是继承了IDisposable的话,那么我using(FileStream fs=...),在using结束的时候,是否会触发其Close()函数?

因为没有.net的源代码,如何确定有还是没有呢?
...全文
1042 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
所长别开枪 2015-08-27
  • 打赏
  • 举报
回复
Using() 跟try finally等价,using只能用在实现了idisposeable接口的类,最终会调用dispose()方法
从_零_开始 2014-03-20
  • 打赏
  • 举报
回复
不会默认调用close(),,但会默认调用Dispose()释放资源
h82258652 2014-03-20
  • 打赏
  • 举报
回复
不会,因为Close内部调用Dispose。而不是Dispose调用Close。 Close方法只是ms为了一些不懂Dispose方法而写的。因为File.Open、File.Close更符合语义,要是给套文件的api你,你第一时间想到关闭文件肯定是Close而不是Dispose。
欢乐的小猪 2014-03-20
  • 打赏
  • 举报
回复
用using会隐含调用Dispose。
偶是菜鸟 2014-03-20
  • 打赏
  • 举报
回复
应该会的
请叫我卷福 2014-03-20
  • 打赏
  • 举报
回复
能使用using块的类 都必须实现IDisposable接口 using(A a = new A()) { // use a } 相当于 A a = new A(); try { // use a } finally { a.Dispose(); } 使用using 跟它调不调用Close()没有任何关系 使用using 只会调用Dispose()方法 只是对于所有的Stream及其派生类来讲 Dispose()和Close()实现功能一样 (有些类就不一样 比如SqlConnection)
宝_爸 2014-03-20
  • 打赏
  • 举报
回复
对了,我看的是.net 4.0版本的代码。
宝_爸 2014-03-20
  • 打赏
  • 举报
回复
不会调用Close,但是会调用Dispose. 用reflector看了下.net的代码。Close和Dispose都是继承自Stream, FileStream没有自己的实现。 [code=csharp ]public virtual void Close() { this.Dispose(true); GC.SuppressFinalize(this); }[/code]
public void Dispose()
{
    this.Close();
}
从代码中可以看到Dispose中调用了Close,因此lz可以放心了。
jy251 2014-03-20
  • 打赏
  • 举报
回复
强迫自己在每次打开某个东西用完之后就close是个好习惯
showjim 2014-03-19
  • 打赏
  • 举报
回复
所有的流默认Close其实就是调用Dispose,FileStream的Dispose里面有调用Flush,如果这点逻辑都保证不了那FileStream真是个废物。不过就算调用了Flush,可能仅仅只是写入了操作系统的硬盘缓冲区,如果要保证写入硬盘的话需要手动调用Flush(true),而不是Flush()。
黄亮 2014-03-19
  • 打赏
  • 举报
回复
会触发其Dispose函数,理论上不用close,但如过是写操作我碰到过莫名不能保存所有数据的问题,所以现在写代码有强迫症,会先调Flash,然后掉Close.
  using (var stream = new FileStream(...))
            {
                // 某些操作
                stream.Flush();
                stream.Close();
            }
threadroc 2014-03-19
  • 打赏
  • 举报
回复
引用 2 楼 threadroc 的回复:
会的吧,你可以测试一下,如果没关闭的话,文本应该是删不掉的
会提示被占用,请重试
threadroc 2014-03-19
  • 打赏
  • 举报
回复
会的吧,你可以测试一下,如果没关闭的话,文本应该是删不掉的
风一样的大叔 2014-03-19
  • 打赏
  • 举报
回复
不懂什么意思

111,113

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧