【问题标题】:What's the difference between creating an object from a class using new Class() and new Class { }? [duplicate]使用 new Class() 和 new Class { } 从类创建对象有什么区别? [复制]
【发布时间】:2015-08-01 23:43:18
【问题描述】:

我有以下课程:

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

做有什么区别:

var instance = new TestClass();

做事

var instance = new TestClass { };

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

编辑:有人能解释一下哪个最好吗?或者如果忽略构造函数,是利还是弊?

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

【问题讨论】:

    标签: c# .net class oop object


    【解决方案1】:

    第一个示例实例化了一个新实例。

    第二个示例通过object initialization 语法实例化一个新实例。

    他们最终都创建了一个新实例。

    如果您需要或想要在实例化期间设置类的公共属性或字段,则可以使用后者:

    var instance = new TestClass { ClassName = "TestingInstance" };
    

    相对

    var instance = new TestClass();
    instance.ClassName = "TestingInstance";
    

    它本质上是“语法糖”,在创建新对象和设置大量属性时让您的生活更轻松(并且对于某些开发人员来说更明确)。

    使用对象初始化时,参数() 是可选的,但大括号{} 和语句结束分号; 是必需的

    【讨论】:

    • 它只是一种在新创建的对象上设置属性的便捷方式,无需多次输入instance.MyProperty = ...
    • 你甚至可以做嵌套初始化,例如new UdpClient{ Client = { ReceiveTimeout = 1000 } };
    【解决方案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;
    

    【讨论】:

      【解决方案3】:

      第二个示例使用 {},允许您在对象上设置公共属性和字段。例如:

      System.Drawing.Point p = new System.Drawing.Point
      {
          X = 3,
          Y = 5
      };
      

      当 {} 中没有任何内容时,几乎没有理由在 () 上使用 {}。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-30
        • 2016-10-04
        • 1970-01-01
        • 2021-09-23
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多