This question already has answers here:
Why are C# 3.0 object initializer constructor parentheses optional?
(5个答案)
7年前关闭。
通常我在将
但是一旦我尝试了--->
& 有效 !!!
在第二种方式中,我只是
那么有人对这些初始化对象的各种方式之间的区别有任何想法吗?
“有效”行完全相同,包括对默认参数的任何使用-因此
有关更多详细信息,请参见C#5规范的7.6.10节。
(5个答案)
7年前关闭。
通常我在将
initialize
添加到object
时立即将list
用这种方式--->list.add(
new foo() { // <--- foo()
field1 = value1,
field2 = value2
}
);
但是一旦我尝试了--->
list.add(
new foo { // <--- foo
field1 = value1,
field2 = value2
}
);
& 有效 !!!
在第二种方式中,我只是
creating
和object
而没有在其尾部使用()
。那么有人对这些初始化对象的各种方式之间的区别有任何想法吗?
最佳答案
完全没有区别。在这两种情况下,您都使用object initializer,并且如果您不指定任何构造函数参数,则完全等同于提供一个空的构造函数参数列表。根据C#规范的7.6.10.1节:
请注意,在不使用对象初始化程序(花括号)的情况下仅调用构造函数时,必须指定构造函数参数。所以:
Foo foo = new Foo(); // Valid
Foo foo = new Foo; // Invalid
Foo foo = new Foo() {}; // Valid
Foo foo = new Foo {}; // Valid
“有效”行完全相同,包括对默认参数的任何使用-因此
Foo
可能仅具有以下构造函数:// You can invoke this without specifying arguments
public Foo(int x = 0)
{
}
有关更多详细信息,请参见C#5规范的7.6.10节。
关于c# - C#中用这两种方式初始化对象之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17105618/
10-10 21:11