Questions tagged «finalizer»

13
在C#中使用Finalize / Dispose方法
C#2008 我已经为此工作了一段时间,但我仍然对在代码中使用finalize和dispose方法感到困惑。我的问题如下: 我知道在处理非托管资源时我们只需要一个终结器即可。但是,如果存在调用非托管资源的托管资源,是否仍需要实现终结器? 但是,如果我开发的类不直接或间接使用任何非托管资源,是否应该实现,IDisposable以允许该类的客户端使用“ using语句”? 实现IDisposable只是为了使您的类的客户端能够使用using语句是否可行? using(myClass objClass = new myClass()) { // Do stuff here } 我在下面开发了这个简单的代码来演示Finalize / dispose的使用: public class NoGateway : IDisposable { private WebClient wc = null; public NoGateway() { wc = new WebClient(); wc.DownloadStringCompleted += wc_DownloadStringCompleted; } // Start the Async call to find if …

15
“处置”是否仅应用于包含非托管资源的类型?
我最近正在与一位同事讨论Dispose实现的价值和类型IDisposable。 我认为IDisposable,即使没有任何非托管资源需要清理,实现应尽快清理的类型也很有价值。 我的同事有不同的看法。执行IDisposable,如果你没有任何非托管资源为你的类型,最终会被垃圾收集是没有必要的。 我的观点是,如果您希望尽快关闭ADO.NET连接,则可以实施IDisposable并且using new MyThingWithAConnection()有意义。我的同事回答说,在幕后,ADO.NET连接是不受管理的资源。我对他的答复是,所有事情最终都是不受管理的资源。 我知道的建议一次性模式,你免费托管和非托管资源,如果Dispose被调用,但如果通过终结/析构函数称为唯一的免费托管资源(和博客前一阵子关于如何提醒消费者不当使用您的IDisposable类型的) 因此,我的问题是,如果您的类型不包含非托管资源,是否值得实现IDisposable?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.