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