我尽量避免在生产代码中使用静态类,因为它们无法注入,无法控制默认初始化,最后你无法隐式清理资源,因为静态对象没有析构函数。另外,你也不能为静态类实现IDisposable,所以听起来像静态类永远不适合作为非托管资源的包装器...... 在这种情况下,完全看起来单例是更好的解决方案来直接替换静态类的使用。但我的问题是 - 为什么编译器不支持静态破坏,毕竟GC会跟踪对静态对象和实例的引用有什么区别呢?
答案 0 :(得分:7)
没有“静态对象”这样的东西。但是,在任何app域中加载的所有类型中的所有静态变量都被视为GC根,直到卸载app域为止。
如果您想在卸载应用领域时执行操作,可以订阅AppDomain.DomainUnload和AppDomain.ProcessExit。
答案 1 :(得分:2)
如果你想要一个静态析构函数,AppDomain.DomainUnload
事件不会起作用吗?