C#3.0-对象初始值设定项
时间:2020-03-06 14:40:11 来源:igfitidea点击:
我有一个小问题,我不明白为什么,很容易解决,但是我仍然想理解。
我有以下课程:
public class AccountStatement : IAccountStatement { public IList<IAccountStatementCharge> StatementCharges { get; set; } public AccountStatement() { new AccountStatement(new Period(new NullDate().DateTime,newNullDate().DateTime), 0); } public AccountStatement(IPeriod period, int accountID) { StatementCharges = new List<IAccountStatementCharge>(); StartDate = new Date(period.PeriodStartDate); EndDate = new Date(period.PeriodEndDate); AccountID = accountID; } public void AddStatementCharge(IAccountStatementCharge charge) { StatementCharges.Add(charge); }
}
(注意startdate,enddate,accountID是自动属性,...)
如果我这样使用它:
var accountStatement = new AccountStatement{ StartDate = new Date(2007, 1, 1), EndDate = new Date(2007, 1, 31), StartingBalance = 125.05m };
当我尝试使用方法" AddStatementCharge:我最终得到一个" null" StatementCharges列表时……在逐步的过程中,我清楚地看到列表得到了一个值,但是一旦退出实例化行,列表变为" null"
解决方案
这段代码:
public AccountStatement() { new AccountStatement(new Period(new NullDate().DateTime,newNullDate().DateTime), 0); }
无疑不是我们想要的。这将创建AccountStatement的第二个实例,并且不执行任何操作。
我认为意思是这样的:
public AccountStatement() : this(new Period(new NullDate().DateTime, new NullDate().DateTime), 0) { }
无参数构造函数会创建其自身的新实例,但不会将其分配给任何对象。
使用
public AccountStatement() : this(new Period(new NullDate().DateTime,newNullDate().DateTime), 0) { }
的插入
public AccountStatement() { new AccountStatement(new Period(new NullDate().DateTime,newNullDate().DateTime), 0); }
我们正在调用一个无参数的构造函数,因此永远不会初始化AddStatementCharge。使用类似:
var accountStatement = new AccountStatement(period, accountId) { StartDate = new Date(2007, 1, 1), EndDate = new Date(2007, 1, 31), StartingBalance = 125.05m };