2009-02-03 68 views
3

我創建了這樣一個constuctor對象...C#傳遞當前對象到另一個對象?

public class BusinessLogic() 
{ 

    public BusinessLogic() 
     { 

      BusinessLogicSubClass blsc = new BusinessLogicSubClass(and I want to pass in BusinessLogic here) 
     } 
} 

,因爲我想BusinessLogicSubClass到回調用它完成一個方法或其他當內BusinessLogic變化的方法我這樣做。 BusinessLogicSubClass還使用構造函數注入爲了使我的單元測試與NMock2一起工作。

這裏的任何建議將有助於提前謝謝你!

回答

5
public BusinessLogic() 
    { 
     BusinessLogicSubClass blsc = new BusinessLogicSubClass(this); 
    } 

這個(解決喬恩斯基特的評論),另一種是將有一個構造函數,一個初始化,它採用了「this」指針:

public class BusinessLogic 
{ 
    private BusinessLogicSubClass blsc = null; 

    public BusinessLogic() {} 

    public void Initialize() 
    { 
     blsc = new BusinessLogicSubClass(this); 
    } 
} 

public class Implementor 
{ 
    public void SomeFunction() 
    { 
     BusinessLogic bl = new BusinessLogic(); 
     bl.Initialize(); 
    } 
} 
6

您可以在一個使用this構造函數。但這通常不是一個好主意,因爲它意味着在對象構建完成之前你已經發布了一個引用。

這不是很清楚爲什麼你要在類中創建一個子類 - 雖然我懷疑你的繼承層次可能不理想。你能否提供更多的細節,以便我們能夠推薦更好的設計模式?

+0

我同意這一點。如果你打算使用這個,我會確保它是最後一個陳述。 Danny的基礎課程將成爲未來之路。 – 2009-02-03 17:30:41

+0

回覆:層次不理想:確實如此,但這可能也適用於層次結構之外的某個類。我猜他在這裏實際上可能不是「子類」。 – TheSmurf 2009-02-03 17:35:01

0

我猜你想通過它你剛剛創建的類。使用傳遞當前對象的this關鍵字。

public class BusinessLogic() 
{ 

    public BusinessLogic() 
     { 

      BusinessLogicSubClass blsc = new BusinessLogicSubClass(this) 
     } 
} 
0

那麼,你想是這樣的:

public class BusinessTest 
{ 
    private BusinessSubTest aSub; 

    public BusinessTest() 
    { 
     aSub = new BusinessSubTest(this); 
    } 

} 

public class BusinessSubTest 
{ 
    public BusinessSubTest(BusinessTest aTest) 
    { 

    }  
} 

還是我誤解的問題?

0

「this」如何?

public BusinessLogic() 
{ 
    BusinesLogicSubClass blsc = new BusinessLogicSubClass(this); 
} 
1

你能使用上的屬性延遲實例推遲BusinessLogicSubClass的,因爲當你需要它的實例化和當BusinessLogic已完成建設?我認爲這會是一個更好的設計。例如。

public class BusinessLogic { 

    private BusinessLogicSubClass mChild; 

    public BusinessLogic() { 
    } 

    public BusinessLogicSubClass Child { 
     get { 
      return mChild ?? (mChild = new BusinessLogicSubClass(this)); 
     } 
    } 

    public class BusinessLogicSubClass { 
     public BusinessLogicSubClass(BusinessLogic parent) { 
     } 
    } 
} 

使用延遲實例化,以防止通過this在原來的構造是不是一個沒有正確構造的對象是個好主意 - 儘管也依賴於其他人是怎麼回事,沒問題。

0

如何使用構造BusinessLogic的靜態方法,然後構造將BusinessLogic實例傳遞到其構造函數的BusinesLogicSubClass。

然後使用BusinessLogic實例上的屬性傳遞BusinesLogicSubClass?

例如...

public class BusinessLogic 
{ 
    private BusinessLogicSubClass subClass; 

    private BusinessLogic() 
    { 
    } 

    public static BusinessLogic CreateBusinessLogic() 
    { 
     BusinessLogic bl = new BusinessLogic(); 
     BusinessLogicSubClass blsc = new BusinessLogicSubClass(bl); 

     bl.subClass = blsc; 
     return bl; 
    } 
} 

所以構造函數被標記爲私有,這樣構造對象的唯一方法是通過像這樣的靜態方法的調用...

BusinessLogic bl = BusinessLogic.CreateBusinessLogic(); 
0

看起來好像這是工作。我以爲這是給我一個錯誤。

使用Initialize而不是構造函數聽起來不錯,我想我會切換到它。

懶惰的實例化看起來不錯,但是這個類現在是啓動這個應用程序的類。也許我需要更多的東西來完成這項工作?(就像那些稱爲屬性的東西?我想我有一個可以懶惰的來電者實例化這個..我必須更多地考慮這個問題..

我必須說從Si保持我離開我的領域,真正理解答案,也許一個例子會幫助我理解,

感謝您的幫助,我將在以後嘗試註冊,因爲這是第一次嘗試使用Stack Overflow工作很好。 :)

相關問題