6 ответов:
нет, нет.
статический деструктор предположительно будет работать в конце выполнения процесса. Когда процесс умирает, вся память/дескрипторы, связанные с ним, будут освобождены операционной системой.
Если ваша программа должна выполнить определенное действие в конце выполнения (например, транзакционный компонент database engine, очищающий свой кэш), это будет намного сложнее правильно обрабатывать, чем просто кусок кода, который выполняется в конце обычного выполнения процесс. Вы должны вручную обрабатывать сбои и неожиданное завершение процесса и попытаться восстановить при следующем запуске в любом случае. Концепция "статического деструктора" не очень поможет.
не совсем деструктор, но вот как бы вы это сделали:
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и выполнить очистку там.
Инициализация и очистка неуправляемых ресурсов от статической реализации довольно проблематична и подвержена проблемам.
почему бы не использовать Синглтон, и реализовать
Finalizerдля экземпляра (идеально наследовать отSafeHandle)
нет нет ничего похожего на деструктор для статических классов, но вы можете использовать
Appdomain.Unloadedсобытие, если вам действительно нужно что-то делать
Comments