我正在编写一个小例子来练习创建类的新实例。
我有以下代码:
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() {};
我应该使用哪个版本?
答案 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