@ hunter's ответ правильный, вы можете использовать синтаксис инициализатора объекта, и эти свойства будут установлены после запуска вашего конструктора.Тем не менее, я хотел бы указать на некоторые недостатки, которые вы можете иметь с вашим кодом
public TestFixture()
{
e= dosomething(a, b);
f= false;
g = DateTime.Now.ToString("yyMMddhhmmss");
h= TestName.Equals("1") && b.Equals("2") ? 1000 : 1;
i= 10000000;
j= a.Equals("FOT");
k = false;
}
Этот код не устанавливает a
или b
, но у вас есть вещи, которые зависят от их значений (e
, g
, j
).Синтаксис инициализатора объекта не будет полезен здесь, вы должны иметь правильные значения по умолчанию для этих значений, если другие значения в конструкторе будут зависеть от них.
Например, когда вы пишете var obj = new Bar() { A = "foo" };
, это расширится до
var obj = new Bar(); // constructor runs
obj.A = "Foo"; // a is set
Очевидно, что код в конструкторе, который смотрит на A
, не увидит значение "Foo"
.Если вам нужно , чтобы увидеть это значение, стратегия инициализации объекта не поможет.Вам нужна перегрузка конструктора , которая принимает значение для сохранения в A
.
var obj = new Bar("Foo");