回答
看来你是在做这样的规划:
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