2013-11-18 3 views
0

Просто хотелось узнать, есть ли разница между двумя инициализациями объектов ??Разница между инициализациями объектов в C#

Какой я должен использовать?

с и без круглых скобок()

var data = new Apple() 
{ 
Color = "red", 
Taste = "good" 
} 

И

var data = new Apple 
{ 
Color = "red", 
Taste = "good" 
} 
+5

Здесь идет буря абсолютно одинаковых ответов – Gant

+0

@DamonGant Вы мастер? –

+0

Все, что вам когда-либо хотели знать об этом (и более) можно найти [здесь] [1] [1]: http://stackoverflow.com/a/3661197/2779990 –

ответ

1

Там нет никакой разницы. Оба они вызовут бесступенчатый конструктор.

Они оба превращаются в:

var data = new Apple(); 
data.Color = "red"; 
data.Taste = "good"; 

компилятором.

7

Когда вы используете вторую форму, на самом деле она скомпилирована как первая форма. Вторая форма означает, что вы хотите использовать конструктор без параметров. Будьте осторожны, потому что, если у вашего класса нет без параметров конструктор, вы не можете его использовать, конечно же, нельзя использовать и первую форму.

+1

+1 , для бесцельного конструктора, безусловно, лучший ответ. – Habib

0

Беспараметрическая конструкторы используются, чтобы спасти вас от ошибок по умолчанию, например, предположим, если вы параметризованный конструктор:

public Apple(string color, string taste) 
{ 
data.Color = "red"; 
data.Taste = "good"; 
} 

когда-нибудь вы/пользователь может забыть передать параметр для конструктора Apple (х, у) , Таким образом, это всегда хорошая практика, чтобы определить конструктор без параметров внутри класса, как:

public Apple() 
{ 
data.Color = "yellow"; 
data.Taste = "sour"; 
} 

, если вы забыли вызвать конструктор со значением желаемых параметров, чем конструктор по без параметров по умолчанию будет называться и переменными будет инициализируются по умолчанию.

+0

Если ваш класс имеет разумные значения по умолчанию, рекомендуется создать конструктор без параметров. Но это далеко от этого * всегда * является хорошей практикой. Существует много случаев, когда у вас не должно быть конструктора без параметров, поэтому я бы настороженно рекомендовал его как «всегда хорошо». – Kyle

Смежные вопросы