获取类的“所有者”(如果它是另一个类的属性)

时间:2018-10-02 09:59:27

标签: c# class properties

这是一个更一般的问题,可以帮助我更好地理解。考虑我有3个班级:

  1. ClassA
  2. ClassB
  3. ClassC

ClassA和ClassB都将ClassC作为这样的公共属性:

class ClassA
{
    public ClassC cInstanceInA {get; set;}
}

class ClassB
{
    public ClassC cInstanceInB {get; set;}
}

我的ClassC中是否有一种灵巧的方法来确定当前实例是ClassA还是ClassB的属性? 这样我可以做这样的事情

class ClassC
{
    public void myMethod()
    {
         if(IBelongToClassA)
         {
             //do something
         }
    }
}

我知道,我可以将ClassA或ClassB(或有名称/另一个标识符)传递给ClassC的构造函数,并在其中存储信息,但是我想知道是否有更通用的方法可以做到这一点。

2 个答案:

答案 0 :(得分:3)

不,不幸的是没有。实例本身无法知道在哪里,因为实际上所有对象都存储在内存堆中,并且在引用实例时,您要做的就是创建一个指向该内存位置的托管指针

甚至更多-多个对象可以指向同一个实例,因此可以存在一对多关系,这表明没有像这样的内置机制。 / p>

因此,如果要在两个类之间创建父子关系,并且需要从ClassC访问父类,则必须在此类中创建某种引用。

注意:由于使用了垃圾收集器,因此可以安全地使用循环引用,因为不再引用时,它们将被收集在一起。但是,这是Xamarin.iOS中的一个问题,在此必须记住,从基于iOS的类派生的对象也将受到引用计数,在这种情况下,循环引用将导致实例将永远留在记忆中。为避免这种情况,您可以使用[Weak]属性修饰属性,Xamarin.iOS可以识别并破坏强循环引用。有关更多信息,请参见documentation

答案 1 :(得分:0)

我认为没有办法做到。但是也许将key添加到componentDidMountmyMethod类中?像这样:

A