/ / Initialisation de l'instance singleton dans un constructeur statique - c #, singleton, lazy-evaluation

Initialisation de l'instance singleton dans un constructeur statique - c #, singleton, lazy-evaluation

Je veux mettre en œuvre simple Singleton et aprèscertaines enquêtes ont ensuite fonctionné correctement. Je le teste à l'aide d'une application de console simple, mais je serai utile si quelqu'un d'autre peut commenter. La raison pour laquelle je "doute" parce que la nouvelle instance de Singleton est créée dans un constructeur statique et ne sait pas si cela a des effets secondaires.

 sealed class SingletonEx
{
public static readonly SingletonEx Instance;

static SingletonEx()
{
if (null == Instance)
{
Instance = new SingletonEx();

}
}
private SingletonEx() { }


}

Au cas où vous seriez curieux, j'ai trouvé http://csharpindepth.com/Articles/General/Singleton.aspx très utile sur ce sujet.

Réponses:

0 pour la réponse № 1

Ce n'est pas une utilisation typique pour statiqueconstructeur, bien qu'il soit possible de le faire. Un effet secondaire serait que le constructeur serait exécuté avant la première utilisation de toute instance SingletonEx sera utilisée dans votre code. Avoir un constructeur statique ne changerait pas grand chose au comportement "Singleton". Mais faites attention, l’initilisation se produirait à une autre étape que si elle était statique.

Je serais inquiet pour la ligne suivante:
public static readonly SingletonEx Instance;
Voici vos problèmes:
public - Cela signifie qu'il pourrait être changé en dehors de la classe.Etant donné que l'instance Singleton est référencée par une variable membre statique privée, l'instanciation ne se produit pas tant que la classe n'est pas référencée pour la première fois par un appel à la propriété Instance. Cette solution implémente donc une forme de la propriété paresseuse d'instanciation, comme dans la forme Design Patterns de Singleton. Lorsque vous implémentez un modèle de conception, suivez-en le plus possible sur sa conception.
readonly - ne devrait pas être ici non plus. Il est généralement modifiable, sauf si vous avez une bonne raison de le faire.