Каково различие между этим два кода?
class SomeClass
{
SomeType val = new SomeType();
}
и
class SomeClass
{
SomeType val;
SomeClass()
{
val = new SomeType();
}
}
Какой метод предпочтен?
Между ними нет практически никакой разницы. Присвоение поля будет происходить внутри конструктора в обоих случаях. Однако есть разница в том, как это происходит в отношении конструкторов базового класса. Возьмем следующий код:
class Base
{
public Base()
{
}
}
class One : Base
{
string test = "text";
}
class Two : Base
{
string test;
public Two()
{
test = "text";
}
}
В этом случае конструктор базового класса будет вызван после присвоения поля в классе One
, но до присвоения в классе Two
.
Первая версия позволяет вам определять несколько конструкторов без необходимости не забудьте поместить = new SomeType ()
в каждый из них.