我有以下课程:
public class TestClass {
public string ClassName {
get;
set;
}
}
做什么之间的区别:
var instance = new TestClass();
并且正在做
var instance = new TestClass { };
我认为你需要包含()来调用对象的构造函数。那是什么意思?
编辑:有人可以解释哪个最好吗?或者,如果忽略构造函数,优点或缺点?
Edit2:对不起,如果我问了一些已经回答的话。这个区别对我来说有点清楚,但我真的不明白我如何混合和匹配()和{},因为有时候()被忽略了,我想知道我什么时候可以这样做
答案 0 :(得分:5)
第一个示例实例化一个新实例。
第二个示例通过object initialization语法实例化一个新实例。
他们最终都创建了一个新实例。
如果您在实例化期间需要或想要设置类的公共属性或字段,则可以使用后者:
var instance = new TestClass { ClassName = "TestingInstance" };
而不是
var instance = new TestClass();
instance.ClassName = "TestingInstance";
它基本上是"语法糖"在创建新对象和设置大量属性时,这会让您的生活更轻松(对于某些开发者来说更明确)。
使用对象初始化时,参数()
是可选的,但大括号{}
和语句结尾的分号;
是必需的
答案 1 :(得分:2)
第二段代码是对象初始化的简写语法。
如果要同时在对象上设置属性,可以使用第二种语法,如下所示:
var x = new SomeObject
{
Property1 = "What's this?",
Property2 = 42
};
您也可以合并:
var x = new SomeObject("Some constructor parameter", 17, true)
{
OtherProperty = 42
};
代码可以松散地翻译成:
var temp = new SomeObject("Some constructor parameter", 17, true);
temp.OtherProperty = 42;
var x = temp;
答案 2 :(得分:0)
使用{}的第二个示例允许您在对象上设置公共属性和字段。例如:
System.Drawing.Point p = new System.Drawing.Point
{
X = 3,
Y = 5
};
当{}内没有任何内容时,没有理由使用{} over()。