2011-06-12 51 views
0

我遇到以下問題。這是我擁有的一些類的簡單示例(每個類都依賴於其他類)。在初始化之前將對象傳入構造函數

public Class1() 
{ 
    public Class1(Class2 class2) 
{ 

} 
} 

public Class2() 
{ 
    public Class2(Class3 class3) 
{ 

} 
} 

public Class3() 
{ 
public Class1 class1; 
public Class3(Class1 class1) 
{ 
    this.class1 = class1; 
} 
} 

然後,我有以下代碼初始化對象。

Class1 class1 = null; 
Class2 class2 = null; 
Class3 class3 = null; 

class3 = new Class3(class1); 
class2 = new Class2(class3); 
class1 = new Class1(class2); 

Assert.IsNotNull(class3.class1) 

我的問題是assert始終爲空,即使class1已初始化。我所擁有的一個條件是,我只希望在那裏創建每個類的一個實例。

任何人都可以建議最好的方法來確保斷言通過。

class3 = new Class3(class1); 

所以很自然的斷言失敗:

回答

0

當創建class3時,class1未初始化爲其對象,因此class3的實例爲null。

適當的方法,使此測試通過是:

Class1 class1 = null; 
Class2 class2 = null; 
Class3 class3 = null; 

class1 = new Class1(); 
class3 = new Class3(class1); 
class2 = new Class2(class3); 
class1.Class3 = class3; 

Assert.IsNotNull(class3.class1) 
0

class1當你打電話是空的。在嘗試將它傳遞給構造函數Class3之前,您需要實例化class1。

現在,這不是微不足道的實現,因爲你有循環引用。因此,您需要首先創建對象,然後修復引用。將構建與其他對象的引用分配分開。

更重要的是,您不應該命名對象實例class,因爲它們是對象而不是類。區別很重要。

0

最初Class1的變量是空指針。然後你給它分配一些值並且參考的變化。但是class3.class1仍然指向null。

您需要確保引用不會更改,但它指向的值會發生更改。

+0

你的意思是參考而不是指針我認爲 – 2011-06-12 15:51:09

+0

是的@David我忘了單詞引用和使用似乎不明確的指針。我正在修改:P – 2011-06-12 15:59:34

相關問題