基本上可以说我有一个类A,它有一个B类成员。是否可以使用反射从B中的构造函数中获取创建B实例的A实例(如果有的话)?
class A
{
private B b = new B();
}
class B
{
public B()
{
// How could I get the instance of A (object), if any, that is creating me?
}
}
伙计们,我的最终目标是创建一个通用的可绑定属性类,该类能够找到其父级的PropertyChanged接口(如果已实现)以自动通知属性。假设我有一个名为MyBindableProp的类,它在实现INotifyPropertyChanged接口的类中使用。我想要的是通过将属性简单地声明为MyBindableProp {get;组; }。如果我能找到托管对象,我知道如何做其余的事情。在构造函数中传递它不在桌面上。
答案 0 :(得分:5)
你必须使用反射吗?您只需将A
的实例传递给B
即可。
class A
{
private B b;
public A() {
b = new B(this);
}
}
class B
{
private readonly A a;
public B(A a) {
this.a = a;
}
}
编辑:我正在看你的评论,你说“我怎么能得到A(对象)的实例,如果有的话,那就是创造我的?”我猜B
并非始终从A
创建,因此您可以在B
上公开另一个不带任何参数的构造函数:
class B
{
private readonly A _a;
public B() {}
public B(A a) {
_a = a;
}
}
然后确保_a
在使用之前已初始化:
if (_a != null)
...
答案 1 :(得分:0)
您可以让b构造函数获取A public B(A instance)
{this.AObject=instance;} private B b=new B(this)
答案 2 :(得分:0)
我的建议是:
class B
{
private A myA;
public B(A yourA)
{
myA = yourA;
}
}
在某些课程中你应该有一个
private B myB;
public void createB() {
myB = new B(this);
}
并且你将从这个继承类,所以你可以使用createB
来调用B的参数化构造函数,你不必一直传递this
。