2008-09-24 127 views
2

我有一個小問題,我不明白爲什麼,它很容易繞過它,但我仍然想明白。C#3.0 - 對象初始化程序

我有以下類:

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,結束日期,帳戶ID是自動的屬性...)

如果我使用這種方式:

var accountStatement = new AccountStatement{ 
               StartDate = new Date(2007, 1, 1), 
               EndDate = new Date(2007, 1, 31), 
               StartingBalance = 125.05m 
              }; 

當我嘗試使用方法「AddStatementCharge:我結束了一個」null「StatementCha RGES列表...在一步一步,我清楚地看到我的列表獲取值,但只要我退出德實例行,我的名單成爲「空」

回答

18

此代碼:

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) 
{ 
} 
3

你無參數的構造函數創建一個自己的新實例,但不把它分配給什麼。

4

使用

public AccountStatement() : this(new Period(new NullDate().DateTime,newNullDate().DateTime), 0) { } 

insetad

public AccountStatement() 
    { 
     new AccountStatement(new Period(new NullDate().DateTime,newNullDate().DateTime), 0); 
    } 
-2

要調用一個無參數的構造函數,以便AddStatementCharge永遠不會初始化。使用類似的東西:

var accountStatement = new AccountStatement(period, accountId) { 
              StartDate = new Date(2007, 1, 1), 
              EndDate = new Date(2007, 1, 31), 
              StartingBalance = 125.05m 
             }; 
+0

不能我的參數少構造函數調用另一個,我沒有accountID,所以不能直接調用它。 必須使用:如前所述。或者簡單地在無參數ctor中放置一個返回值。 謝謝! – pmlarocque 2008-09-24 15:33:39