这是一个更一般的问题,可以帮助我更好地理解。考虑我有3个班级:
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的构造函数,并在其中存储信息,但是我想知道是否有更通用的方法可以做到这一点。
答案 0 :(得分:3)
不,不幸的是没有。实例本身无法知道在哪里,因为实际上所有对象都存储在内存堆中,并且在引用实例时,您要做的就是创建一个指向该内存位置的托管指针。
甚至更多-多个对象可以指向同一个实例,因此可以存在一对多关系,这表明没有像这样的内置机制。 / p>
因此,如果要在两个类之间创建父子关系,并且需要从ClassC
访问父类,则必须在此类中创建某种引用。
注意:由于使用了垃圾收集器,因此可以安全地使用循环引用,因为不再引用时,它们将被收集在一起。但是,这是Xamarin.iOS中的一个问题,在此必须记住,从基于iOS的类派生的对象也将受到引用计数,在这种情况下,循环引用将导致实例将永远留在记忆中。为避免这种情况,您可以使用[Weak]
属性修饰属性,Xamarin.iOS可以识别并破坏强循环引用。有关更多信息,请参见documentation。
答案 1 :(得分:0)
我认为没有办法做到。但是也许将key
添加到componentDidMount
和myMethod
类中?像这样:
A