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);
    }
 }
4

3 に答える 3

4

パラメーターを使用してコンストラクターを作成すると、デフォルトのパラメーターのないコンストラクターはなくなります。値を指定せずにオブジェクトを初期化する場合は、パラメーターのないコンストラクターを明示的に宣言する必要があります。どのように使用するかによって異なります。オブジェクトをこれらの値のみで初期化し、オブジェクトが無効な場合はそれらを使用せずに初期化する場合は、パラメーターのないコンストラクターを追加しないでください。ただし、パラメーターを持つコンストラクターが、いくつかの値でオブジェクトを初期化する方法に過ぎない場合は、C# 3.0 オブジェクト初期化子を使用して、以下のようにいつでもオブジェクトを初期化できます。

 var product = new Product{Name = "Some Name", Price = 10.0};
于 2012-07-10T09:12:08.917 に答える
1

ORM マッパー、逆シリアル化などでは、オブジェクトを自動的に作成するために必要です。

Product() {}

プライベートではなく、内部です。

于 2012-07-10T08:52:48.757 に答える
0

シリーズ化のせいかもしれません。

オブジェクトにパラメーターなしのコンストラクターがない場合、リフレクションを介して動作するほとんどのデシリアライザーは、渡すパラメーターがわからないため、オブジェクトのインスタンスを作成できません。

Obsolete 属性を追加して、これを明示することがよくあります。

[Obsolete("This constructor is for deserialization only", true)]
private Product() { }
于 2012-07-10T08:50:16.533 に答える