在 C# 中创建对象的实例时,有和没有 () 符号有什么区别?

What is the difference between with and without () symbol in creating an instance of an object in C#?

我有一个class产品

public class Product
{
    public string Name { get; set; }
}

能否请您帮我解释一下下面两种创建 Product class 实例的区别?

var instanceOne = new Product
{
    Name = "iPhone 4"
}

var instanceTwo = new Product()
{
    Name = "iPhone 5"
}

谢谢

没有区别,它们是相同的(假设您打算初始化 Name 属性,而不是定义它,并且它不能是静态的),除了一个非常具体案例:

Product instanceOne = new()
{
    Name = "arf"
};

如果您使用目标类型 new,您必须使用 new() {...} 版本,因为 new {...} 定义了一个匿名类型。

两者没有区别

请注意 object initalisers 也允许指定构造函数参数。

class Cat 
{
    public Cat() {}

    public Cat(string name) { Name = name; }

    public string Name { get; set; }

    public string Color { get; set; }
}

(...)

var lightning = new Cat(Name: "Lightning")
{
    Color = "White"
};

var storm = new Cat
{
    Name = "Storm",
    Color = "Gray"
};

再多一点

另请注意

var storm = new Cat
{
    Name = "Storm",
    Color = "Gray"
};

不一样
var storm = new Cat();
storm.Name = "Storm";
storm.Color = "Gray";

前者的结果是:

var __a = new Cat();
__a.Name = "Storm";
__a.Color = "Gray"; 
var storm = __a;

如图Overview of C# 3.0.

以下示例中的 () 是多余的:

var instanceTwo = new Product()
{
    Name = "iPhone 5"
}

你可以只写:

var instanceTwo = new Product // <----- () deleted
{
    Name = "iPhone 5"
}