回答
看來你是在做這樣的規劃:
public class MyClass
{
private OtherClass _someProperty;
public OtherClass SomeProperty
{
get
{
if (this._someProperty == null) this._someProperty = new OtherClass(this);
return this._someProperty;
}
}
}
public class OtherClass
{
private MyClass _parent;
public OtherClass(MyClass parent)
{
this._parent = parent;
}
}
這是很標準的OOP方法。對於更高級的場景,您應該記住的一件事是,現在您在這兩個對象之間有一個循環引用,並且垃圾收集器無法在引用其中一個時收集其中的任何一個。
個人而言,我傾向於通過從'this'中提取所需的成員並聲明'child'的構造函數來僅接受它所需的內容來打破循環引用。如果它實際上需要對其父對象的引用,那就這樣吧(考慮一個鏈表) – Gusdor 2013-05-02 09:10:28
關於垃圾收集器你是對的。這是我擔心的事情之一。 – oMatrix 2013-05-02 10:07:21
取決於MyClass和OtherClass在做什麼......但是我會建議如果OtherClass使用MyClass的屬性/方法..等,那麼應該使用適當的繼承來代替。這裏很難給出正確的答案。 – TheKingDave 2013-05-02 10:33:57
在OOP世界它是訪問一個孩子 類或不是一個父類變量是個好主意?
這不是一個想法,這就像OOP
作品actualy。
您聲明父類,能從中得到孩子類和孩子類,你可以訪問父的public
,protected
和internal
(如果孩子和父是在同一組件)的成員。
This is OOP設計爲它的優秀。
如果您還有其他問題,請澄清。
OP也在討論使用'this'來初始化孩子,所以OP可能沒有正確使用繼承,或者可能使用奇怪的設計模式,但是使用+1。 – Izzy 2013-05-02 09:05:49
通過一個子類的定義:
一個子類是從其他派生的類,現在將是父類的。
這聽起來像你的代碼看起來是這樣的:
class Parent {}
class Child : Parent {
Parent m_parent;
Child(Parent parent){m_parent=parent;}
}
存放父類一提的是這裏沒有必要;子類已經有權訪問其成員變量。如果不明確,甚至可以使用base
。
爲此,使用this
作爲參數來初始化一個子類,給它訪問它的父類,是不是一個好主意。
- 1. C#類初始化不同的參數?
- 2. 使用參數初始化
- 3. 如何初始化用作函數參數的類類型
- 4. 初始類作爲子類
- 5. C++子類參數化類,並使用子類作爲一個專業化
- 6. 使用'this'指針初始化std :: array
- 7. Swift:使用自定義參數初始化UIViewController子類
- 8. C#初始化構造函數使用:this
- 9. 初始化,初始化與參數和便利初始化
- 10. C++使用'this'作爲不允許的類型模板參數
- 11. 歧義使用初始化列表作爲參數
- 12. C++初始化作爲函數
- 13. 設置初始化數組作爲參數,在C#
- 14. C#初始化類
- 15. C++類初始化
- 16. UINavigationController子類的便捷初始化使子類常量初始化兩次
- 17. 使用的初始化參數
- 18. 初始化NSManagedObject的子類
- 19. 初始化UIAlertController的子類
- 20. 初始化'Time'的子類
- 21. 雨燕2.2 - 使用初始化器與類類型的可變參數參數
- 22. 用參數初始化
- 23. 引用作爲類成員初始化
- 24. 初始化兩種類型的參數
- 25. python超類的初始化參數
- 26. 用子類的ctor初始化
- 27. 在C++中初始化抽象基類的子類的數組
- 28. C++ Overload&Override - 無法初始化類型爲''的參數,類型爲'''
- 29. 燼-CLI:初始化函數和初始化器和子類
- 30. 初始化參考C++
不確定你的意思 - 你能提供一個示例代碼片段來說明你的意思嗎? – 2013-05-02 08:58:24
從子類訪問父類變量很好。孩子班怎麼知道這是什麼意思? 「這個」是什麼意思? – TheKingDave 2013-05-02 08:58:31
你的意思是說你想傳遞一個指向基類構造函數的指針,或者說你想使用base關鍵字初始化基類變量?另外,在C#中,如果您想初始化父類變量,則使用base而不是this,如果這就是您的意思。正如其他人已經說過,你的問題需要澄清。 – 2013-05-02 08:59:37