以下是我班级的示例代码:
#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
何时使用前者(空白的那个)以及何时使用后者?如果我在括号内留空,但确实传递参数,它会起作用吗?
答案 0 :(得分:1)
不,除非您将其定义为:
var ItemMaster = new ItemMaster() { ItemName = "NewItem" , CategoryID = 2 };
但是,每当我想在对象创建时实例化一些属性时,我更喜欢重载c'tor。
答案 1 :(得分:1)
带参数的构造函数只是将属性/字段初始化为非默认值的便捷方式。它(通常)与调用无参数构造函数然后手动分配属性相同。
如果我在括号内留空,但确实传递参数,它会起作用吗?
它将按照书面形式工作,即属性将初始化为默认值而不是您传入的内容,因为您没有将参数分配给字段/属性。所以它不能正常工作。
某些反序列化器需要无参数构造函数。并且结构总是有一个不可覆盖的无参数构造函数。
对于不可变类型,您需要带参数的构造函数,因为在构造之后无法更改字段/属性。