是否有办法从另一个对象的构造函数中获得父对象(托管对象)

本文关键字:对象 构造函数 一个对象 是否 | 更新日期: 2023-09-27 18:16:36

基本上让我说我有一个类a,有类B的成员。是否有可能使用反射来获得a的实例(如果有的话)是从B的构造函数内创建B的实例?

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;设置;}。如果我能找到托管对象,我知道怎么做剩下的。

是否有办法从另一个对象的构造函数中获得父对象(托管对象)

一定要用反射吗?你可以把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)
    ...

您可以让b构造函数获得A的实例public B(A instance) {this.AObject=instance;} private B b=new B(this)

我的建议是:

class B
{
    private A myA;    
    public B(A yourA)
    {
        myA = yourA;
    }
}

在某些课程中应该有

private B myB;
public void createB() {
    myB = new B(this);
}

,你将从这个继承类,所以你可以使用createB,它将调用B的参数化构造函数,你不必一直传递this