Подтвердить что ты не робот

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

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

public static bool Initialized { private set; get; }

или это:

public static bool Initialized = false;

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

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

Спасибо

4b9b3361

Ответ 1

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

static MyClass()
{
    Initialized = false;
}

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

Ответ 2

Так как С# 6:

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

Ответ 3

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

public static bool Initialized { private set; get; }

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

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

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

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

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

Ответ 4

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

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

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;
    }
}

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

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