C# using语句使用流还需要显示调用Close方法吗?
2017-02-24 09:19
405 查看
查阅了.NET源码中的Stream类
发现其对于IDisposable接口的实现如下
public void Dispose()
{
/* These are correct, but we'd have to fix PipeStream & NetworkStream very carefully.
Contract.Ensures(CanRead == false);
Contract.Ensures(CanWrite == false);
Contract.Ensures(CanSeek == false);
*/
Close();
}注意,此方法是继承自IDisposable接口,且此处该方法并没有写成virtual方法
因此,我们可以得出以下结论:继承自Stream的流调用Dispose和Close方法是等价的,所以在使用using语句来释放流的时候,不需要再显示的调用Close方法。
发现其对于IDisposable接口的实现如下
public void Dispose()
{
/* These are correct, but we'd have to fix PipeStream & NetworkStream very carefully.
Contract.Ensures(CanRead == false);
Contract.Ensures(CanWrite == false);
Contract.Ensures(CanSeek == false);
*/
Close();
}注意,此方法是继承自IDisposable接口,且此处该方法并没有写成virtual方法
因此,我们可以得出以下结论:继承自Stream的流调用Dispose和Close方法是等价的,所以在使用using语句来释放流的时候,不需要再显示的调用Close方法。
相关文章推荐
- 使用using{},去掉数据库连接的.Close()方法,using自动会调用Dispose()来关闭数据库连接
- C#: 调用存储过程或函数显示"需要"参数,但未提供该参数的解决方法
- 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用 try{} catch{} 语句。 我们可以在try语句块中试图
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- C#使用技巧之调用JS脚本方法一
- [C#]如何将类放置于不同的文件中在同一个解决方案中调用?(不同解决方案的需要使用类库ClassLibrary)
- android library工程中使用switch_case语句,调用资源文件的id出现错误的原因分析及解决方法
- 在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
- linux 使用crontab添加定时任务,日志显示已经执行但是任务没有成功调用解决方法
- C#使用this关键字实现串联构造函数调用方法
- 使用C#调用Java带MIME附件WebService方法的初步设想
- C# 中 using 的三种使用方法
- 使用C#反射实现用户控件调用父页面方法
- 在用java进行极光推送的时候,需要的一个工具类: 使用的时候,直接调用 sendToRegistrationId 方法
- 在使用JS调用Window.close()方法关闭一个窗口是,如何禁止弹出对话窗口?
- C#使用技巧之调用JS脚本方法一
- 转:使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- Android使用ksoap2调用C#中的webservice函数方法
- c#使用Oracle数据库执行多条查询语句,非存储过程方法