Это
var r = new Revex { AllCharacters = "abcd" };
Является ли синтаксический сахар для
var r = new Revex();
r.AllCharacters = "abcd";
Должно быть очевидно, что поле AllCharacters будет инициализировано значением по умолчанию.
Если вы не хотите использовать значение по умолчанию, вы можете сделать это
public class Revex{
public IEnumerable<char> AllCharacters;
public Revex(){
AllCharacters = Enumerable.Range(0, 256).Select(Convert.ToChar).Where(c => !char.IsControl(c)).ToArray()
}
public Revex(IEnumerable<char> allCharacters){
AllCharacters = allCharacters;
}
}
Есть еще одна опция:
public class Regex{
private static IEnumerable<char> DefaultAllCharacters(){ return Enumerable.Range.. }
private IEnumerable<char> allCharacters;
public IEnumerable<char> AllCharacters{
get { return allCharacters ?? (allCharacters = DefaultAllCharacters()); }
set { allCharacters = value; }
}
}
Здесь вы лениво инициализируете значение свойства, если оно еще не было установлено. Таким образом, вы не оплачиваете первоначальную стоимость установки значения, если оно не было установлено, но платите его позже, когда объект создан.