Каково различие между этой инициализацией методы?

Каково различие между этим два кода?

class SomeClass   
{   

   SomeType val = new SomeType();   

}   

и

class SomeClass  
{      
   SomeType val;   

   SomeClass()   
   {   
       val = new SomeType();   
   }   

}   

Какой метод предпочтен?

5
задан N 1.1 19 March 2010 в 06:56
поделиться

2 ответа

Между ними нет практически никакой разницы. Присвоение поля будет происходить внутри конструктора в обоих случаях. Однако есть разница в том, как это происходит в отношении конструкторов базового класса. Возьмем следующий код:

class Base
{
    public Base()
    {

    }
}

class One : Base
{
    string test = "text";
}

class Two : Base
{
    string test;
    public Two()
    {
        test = "text";
    }
}

В этом случае конструктор базового класса будет вызван после присвоения поля в классе One, но до присвоения в классе Two.

7
ответ дан 14 December 2019 в 01:05
поделиться

Первая версия позволяет вам определять несколько конструкторов без необходимости не забудьте поместить = new SomeType () в каждый из них.

2
ответ дан 14 December 2019 в 01:05
поделиться