Cor*_*urn 3 c# using-statement
我已阅读并且我相信我理解C#的using语句是什么(如果我错了请纠正我):将IDisposable对象初始化为只读有限范围(using块).我知道你可以在之前初始化using并且不限制范围,但建议不要这样:
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
我并不总是关注哪些类是什么类的子类.我不太确定哪些类继承自IDisposable.我不只是好奇在一个using语句中可以使用哪些类,但是我的同事希望在一个using块中找到哪些类?块中应该包含哪些类using?另外,没有使用using块而不调用Dispose 有什么问题吗?它只是关于记忆还是稳定?
Ada*_*son 16
严格地说,任何实现的对象IDisposable和其范围仅限于该函数的对象应该在一个using块内.该IDisposable接口的存在允许处理非托管资源(数据库连接,文件句柄,窗口句柄等)的类以及时,确定的方式处理这些资源.
通常,有三种方法在IDisposable一个类中使用对象:
using可以(也应该)使用.Stream并且需要在对象的生命周期中使用它.在这种情况下,您的类应该实现IDisposable自己并在调用自己的Dispose方法时处置您拥有的对象.一个例子就是这样的System.IO.StreamWriterIDisposable对象的可用生命周期超出了单个方法调用的范围,并且可能超出了对象的生命周期.在这种情况下,其他人必须负责打电话Dispose.第一种情况是您将遇到的最常见的情况,这就是using阻止存在的原因.即使在例外的情况下,它也会确保处理对象.
一些例子:
没有详尽的类列表可以实现IDisposable,因为该列表相当大并且填充了您可能永远不会遇到的类.想想班级的作用 ; 它是否打开某种需要关闭的连接或文件?一般来说,它是否获得了某种需要发布的资源?如果是这样,它可能会实现它.在基本级别,如果编译器允许您将其括起来using,那么它实现IDisposable.
至于不打电话的后果Dispose,不要考虑它.呼叫处理.确实,防御标准是如果你的类直接使用非托管资源,那么你应该定义一个终结器,如果你的对象被收集并且有人没有调用它就会调用dispose,但这不应该是一个设计选择.永远,据我所知.
Jon*_*eet 13
这不是关于记忆.它涉及其他资源,如文件句柄,数据库连接等.
基本上,如果一个类实现了IDisposable,那就是一个信号,你应该在完成后处理它,因为它可能有非托管资源,而且留下来是很昂贵的.(例如,您的连接池可能会用完连接,或者文件句柄将保持打开状态,从而阻止另一段代码再次打开同一个文件).
| 归档时间: |
|
| 查看次数: |
1861 次 |
| 最近记录: |