关于c#3.0:C#中私有无参数构造函数的用途是什么

What is the purpose of private parameterless constructor in C#

我刚刚收到了乔恩·斯基特在邮件中的深度访谈,但我没有按照第7-8页的讨论进行。

0

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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(){}
   .
   .
   .
}

Product(){}的目的是什么?


此代码:

1
Product p = new Product { Name ="Fred", Price = 10m };

相当于:

1
2
3
4
Product tmp = new Product();
tmp.Name ="Fred";
tmp.Price = 10m;
Product p = tmp;

所以无参数构造函数仍然是必需的——它只从示例代码中的类内部调用,所以它可以是私有的。

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

2

然后像这样在任何地方使用:

1
Product p = new Product("Fred") { Price = 10m };

当然,这本书后面会有更多的细节(第8章IIRC)。