下面的一次性模式怎么样?
using System;
public class MyClass : IDisposable
{
public void Dispose()
// Implement IDisposable
{
//just do the cleanup
GC.SuppressFinalize(this);
}
}
Run Code Online (Sandbox Code Playgroud)
抱歉是因为气馁.我想说,如果没有未管理的资源,我需要终结器吗?上述一次性图案不够好吗?是的,即使用户/开发者没有调用dispose,默认情况下GC不会调用处理吗?
那么GC调用处理和终结器的顺序又如何呢?
请看 标准配置模式?为什么我们需要在虚拟方法中使用"disposing"参数,而不是在dipose之后调用终结器? 更多细节.
在其他我们有终结器时,为什么我们调用Dispose with false作为参数.
从http://msdn.microsoft.com/en-us/magazine/cc163392.aspx#S2看起来总是建议从终结器而不是托管引用中释放未损坏的资源.
它始终建议从Dispose方法中释放未损坏的资源......
尽管如此,仍然没有得到全面的要点并阅读文章.
using System;
public class MyClass : IDisposable
{
private bool disposed = false;
protected virtual void Dispose(bool suppressFinalize)
{
if (!disposed)
{
//Just do the cleanup
//and release resources
disposed = true;
}
if (!suppressFinalize)
{
GC.SuppressFinalize(this);
}
}
public void Dispose()
// Implement IDisposable
{
Dispose(true);
}
~MyClass() // the finalizer
{
Dispose(false);
}
}
Run Code Online (Sandbox Code Playgroud)
问候,梦想家
Jon*_*eet 11
因为您可能直接引用了非托管资源(例如Windows句柄),并且即使没有人调用也要释放它们Dispose.
这是非常罕见的 - 通常你只是通过其他托管类型实际上间接引用非托管资源,如果需要它们将具有终结器.
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |