为什么没有静态析构函数?

时间:2010-12-02 17:34:48

标签: .net memory-management static

我尽量避免在生产代码中使用静态类,因为它们无法注入,无法控制默认初始化,最后你无法隐式清理资源,因为静态对象没有析构函数。另外,你也不能为静态类实现IDisposable,所以听起来像静态类永远不适合作为非托管资源的包装器...... 在这种情况下,完全看起来单例是更好的解决方案来直接替换静态类的使用。但我的问题是 - 为什么编译器不支持静态破坏,毕竟GC会跟踪对静态对象和实例的引用有什么区别呢?

2 个答案:

答案 0 :(得分:7)

没有“静态对象”这样的东西。但是,在任何app域中加载的所有类型中的所有静态变量都被视为GC根,直到卸载app域为止。

如果您想在卸载应用领域时执行操作,可以订阅AppDomain.DomainUnloadAppDomain.ProcessExit

答案 1 :(得分:2)

如果你想要一个静态析构函数,AppDomain.DomainUnload事件不会起作用吗?