Чтобы отправить ответ Майкла Даматова (C#), который основан на Херфриде К. Вагнере. (VB.NET) здесь - версия C++/CLI:
ref class MyClass
{
ref class StaticFinalizer sealed
{
!StaticFinalizer();
};
static initonly StaticFinalizer^ stDestr = gcnew StaticFinalizer();
}
MyClass::StaticFinalizer::!StaticFinalizer()
{
System::Diagnostics::Debug::WriteLine("In StaticFinalizer!");
}
P.S. Подобно методу AppDomain.ProcessExit, этот вызов нельзя вызывать, если процесс прерывается ненормально (например, из диспетчера задач). Еще одно предостережение заключается в том, что если MyClass является общим (шаблонным), предположение о том, что его статический конструктор и статический деструктор будет вызываться не более одного раза на выполнение приложения, больше недействительно.
Во-первых, на C# нам нужно отказаться от привычного использования финализатора и деструктора. Один из них детерминирован, другой - нет. Интересно отметить, что спецификация C# возвращает термины обратно из CLR и других спецификаций языка .NET.Интересно также отметить, что в примечаниях к языковому комитету C# явно говорится, что нет никаких причин, по которым C# не может иметь статические финализаторы. http://stackoverflow.com/a/1875149/56793 – JMD 2014-09-26 14:10:01