2013-05-02 32 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作为参数来初始化一个子类,给它访问它的父类,是不是一个好主意。