回答
看来你是在做这样的规划:
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. C++子类参数化类,并使用子类作为一个专业化
- 4. 使用'this'指针初始化std :: array
- 5. Swift:使用自定义参数初始化UIViewController子类
- 6. 初始化,初始化与参数和便利初始化
- 7. 歧义使用初始化列表作为参数
- 8. C++初始化作为函数
- 9. 使用的初始化参数
- 10. 初始化NSManagedObject的子类
- 11. 初始化UIAlertController的子类
- 12. 引用作为类成员初始化
- 13. python超类的初始化参数
- 14. 初始化两种类型的参数
- 15. C++ Overload&Override - 无法初始化类型为''的参数,类型为'''
- 16. C++参考初始化
- 17. 初始化参考C++
- 18. 在C#中初始化子类中的父类数组成员
- 19. 初始化并使用C++ std :: string作为char数组
- 20. 使用字符串作为类名动态初始化类
- 21. 初始化NSWindowController子类
- 22. UIViewController子类初始化
- 23. C++类的数组初始化
- 24. 初始化参数不同
- 25. 使用超类初始化程序初始化一个类
- 26. 模板参数初始化
- 27. 如何用集合初始化初始化C++/cx类?
- 28. 数组的初始化体作为函数参数(C数组),可以吗?
- 29. 使用构造函数参数初始化类成员
- 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