Aujourd'hui, j'ai eu une discussion avec mon collègue et j'ai conclu les points suivants. Veuillez jeter un peu de lumière si tout est correct ou si une modification est nécessaire.
1.-3.Vous ne pouvez pas savoir exactement quand cela se produit et vous ne pouvez donc pas en dépendre. Un constructeur statique vous donnera un petit contrôle sur ce qui se passe quand il est appelé.
public class UtilityClass
{
//
// Resources
//
// r1 will be initialized by the static constructor
static Resource1 r1 = null;
// r2 will be initialized first, as static constructors are
// invoked after the static variables are initialized
static Resource2 r2 = new Resource2();
static UtilityClass()
{
r1 = new Resource1();
}
static void f1(){}
static void f2(){}
}
4.Les constructeurs statiques sont lents
Le moment exact de l'exécution du constructeur statique dépend de l'implémentation, mais est soumis aux règles suivantes:
Tous vos points sont corrects.
La raison pour laquelle les constructeurs statiques doivent être évités est que le compilateur injecte du code partout où n'importe quelle méthode de la classe est appelée pour vérifier que le constructeur statique a été appelé. Cela a un impact négatif sur les performances.
Ce que vous pouvez faire, c'est avoir un champ statique privé dans votre classe auquel est affectée une valeur fictive lorsque le constructeur par défaut (ou un autre constructeur non statique) est appelé. Cela initialise tous les champs statiques lors de la création d'objet.