0

我的应用程序由一对具有父/子关系的类组成,子类有一个父对象成员父类有一个子对象成员列表(对于下面的简化示例,我只使用单个对象)。这些类的信息是从数据库中获取的,同时获取各自的父/子对象。当获取父对象导致它获取其子对象时,这将成为一个问题,导致所有子对象都获取其父对象,从而导致......好吧,你明白了。

为了阻止这个循环,我在获取对象的方法中为任何相关对象使用了可选参数。当其中一个对象想要获取其相对对象时分配此参数。我想知道是否可以检查下面示例中的“父”或“子”是否引用了某些东西,尽管引用的对象是 NULL。我认为这适用于 C++ 中的指针,但据我所知,C# 是无指针的。:(

class ParentClass
{
    ChildClass _child;

    public ParentClass(ChildClass child)
    {
        _child = child;
    }
}

class ChildClass
{
    ParentClass _parent;

    public ChildClass(ParentClass parent)
    {
        _parent = parent;
    }
}

public static class ItemGetter
{
    public static ChildClass GetChild(ParentClass parent = null)
    {
        ChildClass c = null;

        // Here I want to check if 'parent' is referencing anything, regardless of null value.
        ParentClass p = parent ?? GetParent(c);

        c = new ChildClass(p);

        return c;
    }

    public static ParentClass GetParent(ChildClass child = null)
    {
        ParentClass p = null;

        // Here I want to check if 'child' is referencing anything, regardless of null value.
        ChildClass c = child ?? GetChild(p);

        // References to itself as being the parent.
        p = new ParentClass(c);

        return p;
    }
}
4

1 回答 1

0

我认为你的第一个假设是不正确的:

当获取父对象导致它获取其子对象时,这将成为一个问题,导致所有子对象获取其父对象,从而导致......好吧,你明白了。

这不会有问题,因为在内存中只会存在同一对象的一个​​实例。您将只有对父对象和子对象中的对象的引用;不是实际的对象。所以即使看起来像一个无限循环,引用也是安全的。

您需要获取带有子实体的父对象;您无需进行任何检查。

于 2013-01-22T13:55:00.447 回答