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

dex*_*ter 4 .net static memory-management

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

Jon*_*eet 7

没有"静态对象"这样的东西.但是,在任何应用程序域中加载的所有类型中的所有静态变量都将被视为GC根,直到卸载应用程序域.

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

  • @Max:说实话,我通常不会以这种方式包装资源.特别是文件句柄几乎总是最好尽快处理掉. (2认同)