47 votes

valeur par défaut d'une propriété statique de la

J'aime le c#, mais pourquoi ne puis-je faire :

public static bool Initialized { private set; get; }

ou ceci :

public static bool Initialized = false;

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

J'ai juste besoin de définir le niveau d'accès à ma variable (privé), et j'en ai besoin défini à false au démarrage. Je ne voudrais pas faire que ce qui était ennuyeux privé _Initialized variable, qui serait retourné par la lecture du public Initialisé var. J'aime mon code pour être belle. (NB: ma variable est statique, il ne peut pas être initialisé dans le constructeur).

Merci

55voto

Corey Sunwold Points 6330

Vous pouvez utiliser un constructeur statique

static MyClass()
{
    Initialized = false;
}

Toutefois, comme il a été mentionné par d'autres, la valeur par défaut d'une valeur bool sera fausse.

6voto

Reed Copsey Points 315315

Il vous suffit de faire:

public static bool Initialized { private set; get; }

Depuis bool des valeurs sont toujours false par défaut, il n'y a pas besoin de l'initialiser.

Si vous avez besoin de cela pour être vrai par défaut, ou d'avoir une logique plus complexe, vous avez besoin pour ce faire, dans un constructeur statique ou de l'utilisation d'un champ de stockage.

Comme pour les "j'aime mon code pour être belle" - personnellement, pour les non-initialisation par défaut, je pense que c'est juste comme "beau":

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

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

4voto

Simon P Stevens Points 17536

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

Le premier bloc est une auto mise en œuvre de la propriété defination. C'est sucre syntaxique pour une pleine propriété defination de ce 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 un membre statique définition. Si vous regardez l'expansion que j'ai donné ci-dessus, vous remarquerez qu'il comprend une salle de membre statique d'une définition. Si vous souhaitez 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 ligne de propriété de la définition que vous utilisez a été conçu afin de rendre le code un peu plus courte dans le cas le plus fréquent. Si vous voulez faire quelque chose d'autre, vous pouvez utiliser la forme complète du code de la propriété.

Sinon, vous pouvez aller vers le bas un itinéraire complètement différent et l'utilisation d'un constructeur statique. (Voir Corey réponse)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X