Object()和Object {}之间的区别

ame*_*esh 3 c# oop constructor object

C#将允许使用Object()或Object {}创建对象.与Object()和Object {}有什么区别

public item getitem()
{

return new item()

}

public item getitem()
{

return new item {}

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

这个语法:

new SomeType{}
Run Code Online (Sandbox Code Playgroud)

是一个对象初始化表达式,碰巧没有设置任何属性.它隐式调用无参数构造函数.您可以在大括号内添加属性分配:

new SomeType { Name = "Jon" }
Run Code Online (Sandbox Code Playgroud)

这个语法:

new SomeType()
Run Code Online (Sandbox Code Playgroud)

刚刚到参数的构造函数的调用,没有机会来设置属性.

请注意,您也可以使用对象初始值设定项显式调用构造函数(或者是否为参数):

// Explicit parameterless constructor call
new SomeType() { Name = "Jon" }

// Call to constructor with parameters
new SomeType("Jon") { Age = 36 }
Run Code Online (Sandbox Code Playgroud)

有关对象初始值设定项的更多详细信息,请参见C#4规范的7.6.10.2节.

我强烈建议,如果您没有设置任何属性,您只需使用new SomeType()清晰度.在没有设置任何属性的情况下使用对象初始值设定器很奇怪.

  • @Peter:有一个没有参数的构造函数和一个带有字符串参数的构造函数.他们是完全正常的建设者.类型本身不需要知道是否正在使用对象初始化器. (3认同)

Zbi*_*iew 6

item()调用默认构造函数,而item {}调用默认构造函数并允许使用(在本例中为空)对象初始值设定项.