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

