valeur par défaut pour une propriété statique

J’aime c #, mais pourquoi puis-je faire:

public static bool Initialized { private set; get; } 

ou ca :

 public static bool Initialized = false; 

mais pas un mélange des deux dans une seule ligne?

J’ai juste besoin de définir le niveau d’access à ma variable (ensemble privé), et j’ai besoin de la définir sur false au démarrage. Je ne voudrais pas faire de cette variable _Initialized une variable ennuyeuse, qui serait renvoyée par le getter du public Initialized var. J’aime que mon code soit beau. (NB: ma variable est statique, elle ne peut pas être initialisée dans le constructeur).

Merci

Vous pouvez utiliser un constructeur statique

 static MyClass() { Initialized = false; } 

Cependant, comme cela a été mentionné par d’autres, la valeur par défaut d’un bool sera fausse.

Depuis C # 6:

 public static bool Initialized { private set; get; } = false; 

Vous pouvez juste faire:

 public static bool Initialized { private set; get; } 

Puisque les valeurs bool sont toujours fausses par défaut, il n’est pas nécessaire de l’initialiser.

Si vous avez besoin de ceci pour être vrai par défaut, ou pour avoir une logique plus complexe, vous devez le faire dans un constructeur statique ou utiliser un champ de sauvegarde.

Quant à “J’aime mon code pour être beau” – personnellement, pour une initialisation par défaut, je pense que c’est tout simplement “beau”:

 private static bool initialized = true; public static bool Initialized { get { return initialized; } } 

Cela rend l’initialisation à un non par défaut très visible, ce qui n’est pas une mauvaise chose.

Les deux blocs de code que vous avez mentionnés sont deux choses différentes.

Le premier bloc est une définition de propriété implémentée automatiquement . Ceci est le sucre syntaxique pour une définition de propriété complète qui ressemble à ceci:

 private static bool _initialized; public static bool Initialized { private set { _initialized = value; } get { return _initialized; } } 

Votre deuxième bloc de code est une définition de membre statique . Si vous regardez l’extension que j’ai donnée ci-dessus, vous remarquerez qu’elle inclut une définition de membre statique privée. Si vous voulez fournir une valeur initiale, vous pouvez le faire ici:

 private static bool _initialized = false; public static bool Initialized { private set { _initialized = value; } get { return _initialized; } } 

La définition de propriété en ligne que vous utilisez a été conçue pour raccourcir un peu le code dans les cas les plus courants. Si vous voulez faire autre chose, vous pouvez utiliser la forme complète du code de la propriété.

Vous pouvez également suivre un itinéraire complètement différent et utiliser un constructeur statique. (Voir la réponse de Corey )