значение по умолчанию для статического свойства

Мне нравится c#, но почему может я делать:

public static bool Initialized { private set; get; }

или это:

public static bool Initialized = false;

но не соединение обоих в одной строке?

Я просто должен установить уровень доступа на свою переменную (частный набор), и мне нужен он набор во лжи на запуске. Я не хотел бы делать ту скучную частную _Initialized переменную, которая будет возвращена методом считывания общедоступного Инициализированного var. Мне нравится, когда мой код красив. (NB: моя переменная является статической, она не может быть инициализирована в конструкторе).

Спасибо

46
задан Blitzz 7 April 2010 в 22:23
поделиться

3 ответа

Вы можете использовать статический конструктор

static MyClass()
{
    Initialized = false;
}

Однако, как уже упоминалось другими, значение по умолчанию для bool будет ложным.

53
ответ дан 26 November 2019 в 20:29
поделиться

Два упомянутых вами блока кода - это две разные вещи.

Первый блок - это автоматически реализованное определение свойства . Это синтаксический сахар для полного определения свойства, который выглядит следующим образом:

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

Ваш второй блок кода - это статическое определение члена . Если вы посмотрите на приведенное выше расширение, вы заметите, что оно включает определение частного статического члена. Если вы хотите указать начальное значение, вы можете сделать это здесь:

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

Используемое вами определение встроенного свойства было разработано только для того, чтобы сделать код немного короче в наиболее распространенном случае. Если вы хотите сделать что-нибудь еще, вы можете использовать полную форму кода собственности.

Как вариант, вы можете пойти совершенно другим путем и использовать статический конструктор. (См. ответ Кори )

3
ответ дан 26 November 2019 в 20:29
поделиться

Вы можете просто сделать:

public static bool Initialized { private set; get; }

Поскольку значения bool всегда ложны по умолчанию, нет необходимости инициализировать их.

Если вам нужно, чтобы это было истинно по умолчанию или для более сложной логики, вам нужно сделать это в статическом конструкторе или использовать вспомогательное поле.

Что касается «Мне нравится, чтобы мой код был красивым» - лично для инициализации не по умолчанию, я думаю, что это так же «красиво»:

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

Это делает инициализацию нестандартной инициализации очень заметной, что не плохая вещь.

6
ответ дан 26 November 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: