2013-05-02 45 views
0

我想知道使用「this」作爲參數來初始化子類是個好主意嗎?如果我想更好地提出這個問題,我應該問,在OOP世界中,從子類訪問父類變量還是不行?C# - 使用「this」作爲初始化子類的參數

感謝

+4

不確定你的意思 - 你能提供一個示例代碼片段來說明你的意思嗎? – 2013-05-02 08:58:24

+0

從子類訪問父類變量很好。孩子班怎麼知道這是什麼意思? 「這個」是什麼意思? – TheKingDave 2013-05-02 08:58:31

+0

你的意思是說你想傳遞一個指向基類構造函數的指針,或者說你想使用base關鍵字初始化基類變量?另外,在C#中,如果您想初始化父類變量,則使用base而不是this,如果這就是您的意思。正如其他人已經說過,你的問題需要澄清。 – 2013-05-02 08:59:37

回答

2

看來你是在做這樣的規劃:

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方法。對於更高級的場景,您應該記住的一件事是,現在您在這兩個對象之間有一個循環引用,並且垃圾收集器無法在引用其中一個時收集其中的任何一個。

+0

個人而言,我傾向於通過從'this'中提取所需的成員並聲明'child'的構造函數來僅接受它所需的內容來打破循環引用。如果它實際上需要對其父對象的引用,那就這樣吧(考慮一個鏈表) – Gusdor 2013-05-02 09:10:28

+0

關於垃圾收集器你是對的。這是我擔心的事情之一。 – oMatrix 2013-05-02 10:07:21

+0

取決於MyClass和OtherClass在做什麼......但是我會建議如果OtherClass使用MyClass的屬性/方法..等,那麼應該使用適當的繼承來代替。這裏很難給出正確的答案。 – TheKingDave 2013-05-02 10:33:57

1
在OOP世界

它是訪問一個孩子 類或不是一個父類變量是個好主意?

這不是一個想法,這就像OOP作品actualy。

您聲明類,能從中得到孩子類和孩子類,你可以訪問父的publicprotectedinternal(如果孩子是在同一組件)的成員。

This is OOP設計爲它的優秀。

如果您還有其他問題,請澄清。

+2

OP也在討論使用'this'來初始化孩子,所以OP可能沒有正確使用繼承,或者可能使用奇怪的設計模式,但是使用+1。 – Izzy 2013-05-02 09:05:49

0

通過一個子類的定義:

一個子類是從其他派生的類,現在將是父類的。

這聽起來像你的代碼看起來是這樣的:

class Parent {} 
class Child : Parent { 
    Parent m_parent; 
    Child(Parent parent){m_parent=parent;} 
} 

存放父類一提的是這裏沒有必要;子類已經有權訪問其成員變量。如果不明確,甚至可以使用base

爲此,使用this作爲參數來初始化一個子類,給它訪問它的父類,是不是一個好主意。