C# Language Modèle de constructeur singleton


Exemple

public class SingletonClass
{
    public static SingletonClass Instance { get; } = new SingletonClass();

    private SingletonClass()
    {
        // Put custom constructor code here
    }    
}

Le constructeur étant privé, aucune nouvelle instance de SingletonClass ne peut être créée en consommant du code. Le seul moyen d'accéder à l'instance unique de SingletonClass consiste à utiliser la propriété statique SingletonClass.Instance .

La propriété Instance est affectée par un constructeur statique généré par le compilateur C #. Le runtime .NET garantit que le constructeur statique est exécuté au plus une fois et est exécuté avant la première lecture de l' Instance . Par conséquent, toutes les préoccupations relatives à la synchronisation et à l'initialisation sont exécutées par le moteur d'exécution.

Notez que si le constructeur statique échoue, la classe Singleton devient définitivement inutilisable pour la vie de AppDomain.

De même, l'exécution du constructeur statique n'est pas garantie au moment du premier accès à Instance . Au contraire, il fonctionnera à un moment donné avant cela . Cela rend le temps auquel l'initialisation se produit non déterministe. Dans des cas pratiques, JIT appelle souvent le constructeur statique lors de la compilation (et non de l'exécution) d'une Instance référençant une méthode. Ceci est une optimisation des performances.

Reportez-vous à la page Implémentations Singleton pour savoir comment implémenter le modèle singleton.