有没有办法从另一个的构造函数中获取父(托管对象)?

时间:2014-08-05 00:26:20

标签: c# reflection

基本上可以说我有一个类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;组; }。如果我能找到托管对象,我知道如何做其余的事情。在构造函数中传递它不在桌面上。

3 个答案:

答案 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