2013-10-18 45 views
0

我有兩個類,A類和B類。 類A有一個方法,它創建一個B類的實例並使用該實例調用一個公共方法。需要的類設計

B obj = new B(); 
obj.DoSomething(); 

現在類B的DoSomething()方法有一個循環。

public void DoSomething() 
{ 
    for(int i=1;i<=10;i++) 
    { 
     //Do some task 
     //call a method of class A for this iteration 
    } 
} 

這樣做的最佳方法是什麼? 如果我在DoSomething()方法中創建類A的實例,然後調用類A的方法,它是否會導致循環引用?這是做到這一點的正確方法嗎?

+0

爲什麼在你原來的A'的'實例作爲不及格「DoSomething」方法的一個參數?編輯:另外,很難說基於有限的上下文,但另一種可能性是要求'B'構造函數提供'A'的實例,'B'可以將該引用存儲在專用字段中。 –

+0

是否(通過一個實例傳遞給另一個類的方法或構造函數)以正確的方式做到這一點? –

+0

很難說基於有限的上下文,但在耦合類中的這種行爲應該表明糟糕的架構設計如果負責性設計得很好B不應該依賴上層來正常工作 – jlvaquero

回答

0

根據您的程序邏輯,您可以使用this關鍵字通過對當前A類實例的引用。

或者改變程序邏輯,使得循環在類A中。然後循環將調用類B中的方法;之後,類A中的調用方法調用迭代的適當方法。

1

問題是不清楚A是否與BB的依賴關係是A的依賴關係。首先,我認爲你必須定義這個方面。考慮到這一點,你的班級設計將更加自然流暢。

因此,舉例來說,如果你使用A實例需要DoSomething()B,你可以把一個A成員在B類:

public class B 
{ 
    private A _aInstance; 

    public B(A aInstance) 
    { 
     this._aInstance = aInstance; 
    } 

    public void DoSomething() 
    { 
     for(int i=1;i<=10;i++) 
     { 
      //Do some task 
      _aInstance.DoSomethingOther(); 
     } 
    } 
}