我刚收到Jon Skeet在邮件中收到的 C#in Depth ,我没有按照第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(){}
.
.
.
}
Product(){}
的目的是什么?
答案 0 :(得分:8)
此代码:
Product p = new Product { Name = "Fred", Price = 10m };
相当于:
Product tmp = new Product();
tmp.Name = "Fred";
tmp.Price = 10m;
Product p = tmp;
所以仍然需要无参数构造函数 - 它只在示例代码中的类中调用,所以它可以是私有的。
这并不是说所有对象初始值设定项都需要无参数构造函数。例如,我们可以:
// 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;
}
然后从任何地方使用它:
Product p = new Product("Fred") { Price = 10m };
当然,本书后面还有更多细节(第8章IIRC)。