C#具有静态构造函数,可以进行一些初始化(可能会进行一些非托管资源的初始化)。
我想知道是否有静态析构函数?
C#具有静态构造函数,可以进行一些初始化(可能会进行一些非托管资源的初始化)。
我想知道是否有静态析构函数?
Answers:
不,没有。
静态析构函数应该在进程执行结束时运行。当进程终止时,与该进程关联的所有内存/句柄将被操作系统释放。
如果您的程序应在执行结束时执行特定的操作(例如事务数据库引擎,刷新其缓存),则正确处理的难度将比仅在正常执行结束时运行的一段代码困难得多。过程。您必须手动处理崩溃和进程意外终止,然后无论如何都要尝试在下次运行时进行恢复。“静态析构函数”的概念无济于事。
并非完全是析构函数,但是您将执行以下操作:
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.
}
}
}
不,没有。您可以做的最接近的事情是在上为该DomainUnload事件设置事件处理程序,AppDomain并在那里进行清理。
Process_Exit建议的建议,这是非常可取的方法,这是完全不同的。静态ctor触发后,类型的生存期通常是程序集的生存期,该生命周期随AppDomain一起卸载。