c# - streamwriters 有 Close() 和 Dispose() 有什么意义?

标签 c# .net vb.net visual-c++ com

当您在事件的 StreamWriter 上调用 Close 时,将无法再向流中写入任何代码(因为它已关闭)。要打开另一个流,您必须创建 StreamWriter 的新实例,因为没有“Open”方法。

我的问题是,当您在关闭流后除了 Dispose 之外无法真正使用任何东西时,使用 CloseDispose 有什么意义?

如果有 Open 功能,我能理解,即您可以关闭一个文件,然后使用相同的 StreamWriter 打开另一个文件。但是因为只有 Close 并且之后你不能真正使用除了 Dispose 之外的任何东西,为什么不干脆去掉 Close 并使用 Dispose 关闭底层流作为它的第一个 Action ?

我知道 Dispose 来自 IDisposeable 等等。我想知道的是,当 Dispose 似乎调用 Close 时,为什么特别需要 Close

据我所知,无法使用相同的 StreamWriter 打开另一个流,当您别无选择时,Close 毫无意义Dispose 之后,因为所有其他方法都变得无用。

StreamWriter 可以将 CloseDispose 合并到一个方法中时,为什么 StreamWriter 还要麻烦 Close

最佳答案

在处理流时,有一个长期存在的约定,即 Close 是他们必须关闭流的一种方法。这是许多程序员在处理流时习惯并期望看到的术语。没有 Close 方法的流可能会造成混淆,人们可能需要一些时间才能意识到他们应该使用 Dispose 来关闭流。

当然 可能 类已经显式实现了 IDisposable,这样如果没有转换为 Dispose 方法就不会存在IDisposable,我已经清除了一些困惑,但他们选择不这样做,并在类中留下两个重复的方法。

是否使用DisposeClose 关闭流完全取决于您的个人喜好。

关于c# - streamwriters 有 Close() 和 Dispose() 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14058071/

相关文章:

c# - 绑定(bind)到 XAML 派生类中定义的依赖属性

c# - 关闭 IActiveScript 引擎抛出 E_UNEXPECTED 异常

c# - 将异步循环转换为 LINQ 查询

c# - 如何在 .NET 中使用 RSA key 签署 XML 文件?

c# - 集合和列表

c# - 在 C# 中使用 ImageAttributes 旋转色调

asp.net - 如何将 HTML 页面转换为 .ASPX 页面并向其添加/删除控件而不更改页面布局

c# - 如何在代码隐藏的 asp.net 中使标签闪烁

sql - vb.net 从数据库中读取数据

javascript - 在 Asp.net 的 TextBox 中插入所需文本的 java 脚本代码