使用新的Class()和新的Class {}从类创建对象的区别是什么?

时间:2015-05-20 15:49:29

标签: c# .net class oop object

我有以下课程:

public class TestClass {
    public string ClassName {
        get;
        set;
    }
}

做什么之间的区别:

var instance = new TestClass();

并且正在做

var instance = new TestClass { };

我认为你需要包含()来调用对象的构造函数。那是什么意思?

编辑:有人可以解释哪个最好吗?或者,如果忽略构造函数,优点或缺点?

Edit2:对不起,如果我问了一些已经回答的话。这个区别对我来说有点清楚,但我真的不明白我如何混合和匹配()和{},因为有时候()被忽略了,我想知道我什么时候可以这样做

3 个答案:

答案 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()。