静态析构函数

C#有静态构造函数,它做一些初始化。 (可能做一些非托pipe资源初始化)我想知道是否有静态destuctor?

不,没有。

假定一个静态析构函数会在进程执行结束时运行。 当一个进程死亡时,与其关联的所有内存/句柄将被操作系统释放。

如果你的程序在执行结束时应该执行一个特定的动作(如事务数据库引擎,刷新它的caching),那么正确处理将比正常执行结束时运行的一段代码要困难得多这个过程。 您必须手动处理崩溃和意外终止进程,并尝试在下次运行恢复。 “静态析构器”的概念不会有太大的帮助。

不完全是一个析构函数,但这是你如何做到这一点:

class StaticClass { static StaticClass() { AppDomain.CurrentDomain.ProcessExit += StaticClass_Dtor; } static void StaticClass_Dtor(object sender, EventArgs e) { // clean it up } } 

这是最好的方法(ref: https : //stackoverflow.com/a/256278/372666 )

 public static class Foo { private static readonly Destructor Finalise = new Destructor(); static Foo() { // One time only constructor. } private sealed class Destructor { ~Destructor() { // One time only destructor. } } } 

不,没有。 你可以做的最接近的事情是设置一个事件处理程序到AppDomain上的DomainUnload事件,并在那里执行清理。

初始化和清理静态实现中的非托pipe资源是相当有问题的,并且容易出现问题。

为什么不使用单例,并为实例实现一个Finalizer (一个理想的从SafeHandleinheritance)

没有什么像静态类的析构函数,但你可以使用Appdomain.Unloaded事件,如果你真的需要做的事情