2012-07-10 30 views
1

我已經看到了這個聲明的私人蔘數的構造函數在我的項目爲什麼我們每一次

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

我認爲你需要提供有關*上下文的詳細信息*特別是關於你曾見過的項目。 – npinti 2012-07-10 08:49:16

回答

4

一旦你創建了一個帶參數的構造函數,你的默認參數less構造函數就消失了。現在,如果您希望對象在未提供任何值的情況下進行初始化,則必須明確聲明一個參數較少的構造函數。這取決於你想如何使用它,如果你希望只用這些值初始化對象,如果你的對象無效,不用它們,那麼不要添加無參數的構造函數。但是,如果與參數的構造函數只是初始化一些值對象的方式,你總是可以如下初始化對象使用C#3.0對象初始

var product = new Product{Name = "Some Name", Price = 10.0}; 
0

這可能是因爲系列化。

如果您的對象沒有無參數構造函數,那麼通過反射工作的大多數反序列化程序將無法創建該對象的實例,因爲它不知道要傳遞哪些參數。

我常常更加明確,通過添加過時屬性:

[Obsolete("This constructor is for deserialization only", true)] 
private Product() { } 
1

ORM映射器,反序列化等需要它自動創建對象。

而且

Product() {} 

是內部的,而不是私人的。

相關問題