我对c#有点新手,更习惯脚本语言.我喜欢'使用'的想法,你实例化一个对象,然后只要你需要它就在它的范围内运行,然后当它完成它的目的时你让它自己处理掉.
但是,这对我来说并不自然.当人们向我展示使用它的例子时,我认为它是一个很好的工具,但在我自己的编程中解决它的问题从来没有发生过.
如何识别好的地方using
以及如何将它与try-catch块结合使用.它们是否进入块内,或者您是否通常想在try块中包含using语句?
using
只能与实现的类型一起使用IDisposable
; 它保证Dispose()
即使发生错误也会调用该方法.
这段代码:
using (MyDisposableType x = new MyDisposableType()) { // use x }
相当于:
MyDisposableType x = new MyDisposableType(); try { // use x } finally { x.Dispose(); }
我很少编写try/catch块 - 大多数异常会被抛到(靠近)堆栈的顶部.如果我确实需要一个try/catch块,我不确定我把它放在using
声明与外部之间是否特别一致.这实际上取决于您是否希望在运行异常处理代码之前处理资源.
如果您在询问何时应该编写using
语句 - 只要您"拥有"一个实现IDisposable
(直接或间接通过继承)并控制其生命周期的对象.这通常是一个使用非托管资源(如文件句柄或网络连接)的对象.它并不总是非常明显,但你通过经验学习.几乎与IO有关的任何事情都是一次性的,Windows处理(对于字体等)是类似的.