destructeur statique

c # a un constructeur statique qui effectue une initialisation. (Probablement L’initialisation des ressources non gérées) Je me demande s’il existe un système de protection contre les parasites statiques?

Non, il n’y en a pas.

Un destructeur statique serait censé s’exécuter à la fin de l’exécution d’un processus. Lorsqu’un processus meurt, toutes les mémoires / poignées associées sont libérées par le système d’exploitation.

Si votre programme doit effectuer une action spécifique à la fin de l’exécution (comme un moteur de firebase database transactionnel, vider son cache), il sera beaucoup plus difficile de gérer correctement qu’un simple code qui s’exécute à la fin de l’exécution normale de le processus. Vous devez gérer manuellement les pannes et la fin inattendue du processus et essayer de récupérer à la prochaine exécution. Le concept de “destructeur statique” n’aiderait pas beaucoup.

Pas exactement un destructeur, mais voici comment vous le feriez:

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

C’est le meilleur moyen (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. } } } 

Non, il n’y en a pas. La chose la plus proche que vous puissiez faire est de définir un gestionnaire d’événement sur l’événement DomainUnload sur DomainUnload et d’y effectuer votre nettoyage.

L’initialisation et le nettoyage des ressources non gérées à partir d’une implémentation statique sont assez problématiques et sujets à des problèmes.

Pourquoi ne pas utiliser un singleton et implémenter un Finalizer pour l’instance (un inheritance idéal de SafeHandle )

Non il n’y a rien comme destructeur pour les classes statiques mais vous pouvez utiliser l’événement Appdomain.Unloaded si vous avez vraiment besoin de faire quelque chose