构造函数代码:什么时候留空以及何时实例化?

时间:2010-10-30 17:34:42

标签: c# .net .net-3.5

以下是我班级的示例代码:

#region Constructors
public ItemMaster()
{  }

public ItemMaster(string argItemName, string argItemCode, decimal? argStockInHand, decimal? argAlertLevelQty, string argUnit, decimal? argDiscount, string argWhetherInPercent, int argCategoryID)
{
    this.ItemName = argItemName;
    this.ItemCode = argItemCode;
    this.StockInHand = argStockInHand;
    this.AlertLevelQty = argAlertLevelQty;
    this.Unit = argUnit;
    this.Discount = argDiscount;
    this.WhetherInPercent = argWhetherInPercent;
    this.CategoryID = argCategoryID;
}
#endregion

何时使用前者(空白的那个)以及何时使用后者?如果我在括号内留空,但确实传递参数,它会起作用吗?

2 个答案:

答案 0 :(得分:1)

不,除非您将其定义为:

var ItemMaster = new ItemMaster() { ItemName = "NewItem" , CategoryID = 2 };  

但是,每当我想在对象创建时实例化一些属性时,我更喜欢重载c'tor。

答案 1 :(得分:1)

带参数的构造函数只是将属性/字段初始化为非默认值的便捷方式。它(通常)与调用无参数构造函数然后手动分配属性相同。

  

如果我在括号内留空,但确实传递参数,它会起作用吗?

它将按照书面形式工作,即属性将初始化为默认值而不是您传入的内容,因为您没有将参数分配给字段/属性。所以它不能正常工作。

某些反序列化器需要无参数构造函数。并且结构总是有一个不可覆盖的无参数构造函数。

对于不可变类型,您需要带参数的构造函数,因为在构造之后无法更改字段/属性。