我在我的项目中已经看到了这个
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() {}
public static List<Product> GetSampleProducts()
{
return new List<Product>
{
new Product { Name="West Side Story", Price = 9.99m },
new Product { Name="Assassins", Price=14.99m },
new Product { Name="Frogs", Price=13.99m },
new Product { Name="Sweeney Todd", Price=10.99m}
};
}
public override string ToString()
{
return string.Format("{0}: {1}", Name, Price);
}
}
答案 0 :(得分:4)
使用参数创建构造函数后,默认参数less constructor就会消失。现在,如果您希望在不提供任何值的情况下初始化对象,则必须显式声明参数less constructor。这取决于您希望如何使用它,如果您希望仅使用这些值初始化对象,如果您的对象无效,则不使用它们,则不要添加参数较少的构造函数。但是,如果带参数的构造函数只是使用某些值初始化对象的一种方法,那么您始终可以像使用C#3.0对象初始化程序一样初始化对象
var product = new Product{Name = "Some Name", Price = 10.0};
答案 1 :(得分:1)
ORM映射器,反序列化等需要它来自动创建对象。
和
Product() {}
是内部的,而不是私人的。
答案 2 :(得分:0)
可能是因为序列化。
如果你的对象没有无参数构造函数,那么大多数通过反射工作的反序列化器将无法创建对象的实例,因为它不知道要传递什么参数。
我经常通过添加Obsolete属性来明确这一点:
[Obsolete("This constructor is for deserialization only", true)]
private Product() { }