Ответ 1
Вы можете использовать статический конструктор
static MyClass()
{
Initialized = false;
}
Однако, как уже упоминалось другими, значение bool по умолчанию будет ложным.
Мне нравится С#, но почему я могу сделать:
public static bool Initialized { private set; get; }
или это:
public static bool Initialized = false;
но не сочетание обоих в одной строке?
Мне просто нужно установить уровень доступа к моей переменной (частный набор), и мне нужно, чтобы она была установлена на false при запуске. Я не хотел бы делать эту скучную личную переменную _Initialized, которая будет возвращена получателем публичной инициализации var. Мне нравится, чтобы мой код был красивым. (NB: моя переменная статична, она не может быть инициализирована в конструкторе).
Спасибо
Вы можете использовать статический конструктор
static MyClass()
{
Initialized = false;
}
Однако, как уже упоминалось другими, значение bool по умолчанию будет ложным.
Так как С# 6:
public static bool Initialized { private set; get; } = false;
Вы можете просто сделать:
public static bool Initialized { private set; get; }
Поскольку значения bool
по умолчанию всегда ложны, нет необходимости инициализировать его.
Если вам нужно, чтобы это было по умолчанию по умолчанию или для более сложной логики, вам нужно сделать это в статическом конструкторе или использовать поле поддержки.
Что касается "Мне нравится мой код, чтобы быть красивым" - лично, для инициализации без дефолта я думаю, что это так же "красиво":
private static bool initialized = true;
public static bool Initialized { get { return initialized; } }
Это делает инициализацию нестандартной очень видимой, что не так уж плохо.
Два блока кода, о которых вы упомянули, - это две разные вещи.
Первый блок представляет собой автоматическое изменение свойств. Это синтаксический сахар для полного дефиниции свойств, который выглядит следующим образом:
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;
}
}
Используемое определение встроенного свойства было разработано только для того, чтобы сделать код более коротким в наиболее распространенном случае. Если вы хотите сделать что-нибудь еще, вы можете использовать полную форму кода свойства.
В качестве альтернативы вы можете перейти по совершенно другому маршруту и использовать статический конструктор. (См. Ответ Кори)