声明带括号或不带括号的新类实例

时间:2016-01-11 10:22:42

标签: c#

我正在编写一个小例子来练习创建类的新实例。

我有以下代码:

class Person
{
   public string Name { get; set; }
   public int Age { get; set; }
}

class MainClass
{
   static void Main()
   {
      var p = new Person
      {
         Name = "Harry",
         Age = 20
      };
      Console.WriteLine($"Name: {p.Name}. Age: {p.Age}");

      p = new Person()
      {
         Name = "Hermonie",
         Age = 18
      };
      Console.WriteLine($"Name: {p.Name}. Age: {p.Age}");

      Console.ReadLine();
   }
}

它正在运作。

我的问题:

之间有什么区别
var p = new Person {};

var p = new Person() {};

我应该使用哪个版本?

4 个答案:

答案 0 :(得分:4)

两者都将调用默认的无参数构造函数。所以我相信两者都是一样的。

答案 1 :(得分:1)

在这种情况下没有区别,它们都调用默认构造函数。如果有另一个带参数的构造函数,那么差别很明显:

var o = new Person { ... };
var p = new Person("John") { ... };

只有在您不使用初始化时才需要空括号:

var p = new Person(); // Works
var o = new Person; // Error

答案 2 :(得分:1)

除非您想使用标准初始化属性值:

Person p = new Person();

应该足够了,但在你的情况下它们是相同的,并调用默认的构造函数。

但是,如果要设置属性值,可以执行以下操作:

Person p = new Person { Name = "Harry", Age = 18 };

答案 3 :(得分:1)

使用默认构造函数声明一个p:

true

使用以name作为参数的构造函数声明p:

var p = new Person(); 

使用对象初始化器声明一个p:

var p = new Person("Harry"); 

请参阅What's the difference between an object initializer and a constructor?https://msdn.microsoft.com/en-us/library/bb397680.aspx