C#中私有无参数构造函数的用途是什么

Tim*_*Tim 4 c#-3.0

我刚收到Jon Skeet在邮件中的深度C#,我没有按照第7-8页的讨论.

我们现在有一个私有的无参数构造函数,用于新的基于属性的初始化.(第8页)

我不清楚基于属性的初始化如何需要无参数构造函数,如果这是"为了"的意思.

class Product
{
   public string Name { get; private set;}
   public decimal Price { get; private set;}
   public Product (string name, decimal price)
   {
     Name = name;
     Price = price;
   }
   Product(){}
   .
   .
   .
}    
Run Code Online (Sandbox Code Playgroud)

目的是Product(){} 什么?

Jon*_*eet 8

这段代码:

Product p = new Product { Name = "Fred", Price = 10m };
Run Code Online (Sandbox Code Playgroud)

相当于:

Product tmp = new Product();
tmp.Name = "Fred";
tmp.Price = 10m;
Product p = tmp;
Run Code Online (Sandbox Code Playgroud)

所以仍然需要无参数构造函数 - 它只在示例代码中的类中调用,所以它可以是私有的.

这并不是说所有对象初始值设定项都需要无参数构造函数.例如,我们可以:

// Only code within the class is allowed to set this
public string Name { get; private set; }
// Anyone can change the price
public decimal Price { get; set; }

public Product(string name)
{
    this.Name = name;
}
Run Code Online (Sandbox Code Playgroud)

然后从任何地方使用它:

Product p = new Product("Fred") { Price = 10m };
Run Code Online (Sandbox Code Playgroud)

当然,本书后面还有更多细节(第8章IIRC).

  • @ user1767754:那么你总是必须在对象初始值设定项中指定构造函数参数,如上一个例子所示. (2认同)