您好 我想知道像这样初始化对象之间是否有任何区别
MyClass calass = new MyClass()
{
firstProperty = "text",
secondProperty = "text"
}
并像这样初始化对象
MyClass calass = new MyClass // no brackets
{
firstProperty = "text",
secondProperty = "text"
}
我还想知道这种初始化的名称是什么
答案 0 :(得分:9)
不,绝对没有区别。在这两种情况下,您都使用对象初始化表达式。对象初始化器是在C#3中引入的。
在这两种情况下,这完全等同于:
// tmp is a hidden variable, effectively. You don't get to see it.
MyClass tmp = new MyClass();
tmp.firstProperty = "text";
tmp.secondProperty = "text";
// This is your "real" variable
MyClass calass = tmp;
请注意,{/ 1}}的分配仅在分配了属性后才会发生 - 正如您对源代码所期望的那样。 (在某些情况下,我相信C#编译器可以有效地删除额外的变量并重新排列分配,但它必须显然表现得像这样的翻译。如果你重新分配现有的话,它肯定会有所作为。可变的。)
编辑:关于省略构造函数参数的轻微细微之处。如果你这样做,它总是等同于包含一个空参数列表 - 但是不与调用无参数构造函数相同。例如,可以有可选参数或参数数组:
calass
答案 1 :(得分:2)
不。事实上,ReSharper会抱怨带有初始化程序的无参数构造函数的括号是多余的。如果您使用带有一个或多个参数的构造函数,您(显然)仍然需要它们,但是因为不是这种情况,只需删除它们。