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

Tân*_*Tân 11 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();
   }
}
Run Code Online (Sandbox Code Playgroud)

它正在工作。

我的问题:有什么区别

var p = new Person {};
Run Code Online (Sandbox Code Playgroud)

var p = new Person() {};
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个版本?

Anu*_*rma 11

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

  • 他们绝对是一样的:) (2认同)

Sam*_*nen 5

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

var o = new Person { ... };
var p = new Person("John") { ... };
Run Code Online (Sandbox Code Playgroud)

仅当不使用初始化时才需要空括号:

var p = new Person(); // Works
var o = new Person; // Error
Run Code Online (Sandbox Code Playgroud)