当前位置:  开发笔记 > 编程语言 > 正文

关于using语句的一些高级问题

如何解决《关于using语句的一些高级问题》经验,为你挑选了1个好方法。

我知道这里有很多关于如何使用using语句和调用Dispose()方法的线程.我已经阅读了大部分这些主题.

如果我调用Dispose(),它会调用Close()吗?

如果我想使用一个对象(比如SqlDataReader),然后在另一个代码块中再次使用它,我应该不调用Dispose()吗?这也意味着省略using语句.

另外,为了澄清一下,如果FileStream正在包装StreamWriter并且我在FileStream上调用dispose,这将调用Flush(),Close()和Dispose()(取决于Dispose()是否在StreamWriter上调用Close()),对?同样,如果我在FileStream上调用Close,这将只调用FileStream上的Flush()和Close().

检查IL是一个很好的方式来回答这些关于幕后发生的事情的问题吗?



1> Reed Copsey..:

"如果我调用Dispose(),它会调用Close()吗?"

从理论上讲,它应该.BCL类都是这样做的,但由图书馆作者来正确处理这个问题.如果正在使用的库已正确完成,Dispose()也应该是Close()[和Close()将Dispose() - 调用应该是可互换的].

"如果我想使用一个对象(比如SqlDataReader),但是在另一个代码块中再次使用它,我应该不调用Dispose()吗?这也意味着省略using语句."

正确.如果使用using语句,它将始终调用Dispose().这将关闭数据阅读器,然后其他块可以使用它.

"另外,为了澄清,如果FileStream正在包装StreamWriter并且我在FileStream上调用dispose,这将调用Flush(),Close()和Dispose()(取决于Dispose()是否在StreamWriter上调用Close()) ,对吧?同样,如果我在FileStream上调用Close,这只会调用FileStream上的Flush()和Close()."

如果你围绕StreamWriter包装FileStream,我强烈建议一致地处理它们.对两个成员使用单个using语句,因此它们都在块的末尾处理掉.这是最安全,最干净的方法.

"检查IL是一个很好的方式来回答这些关于引擎盖下发生的事情的问题吗?"

这是一种方式 - 虽然是一种更困难的方式.在MSDN上阅读有关使用和流的内容,文档将以简单的术语解释它,而不是试图解析IL.如果你好奇,IL会告诉你究竟发生了什么.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有