0

私のアプリケーションは、子クラスに 1 つの親オブジェクト memberがあり、親クラスに子オブジェクト member のリストがあるように、親子関係を持つクラスのペアで構成されています(以下の簡単な例では、単一のオブジェクトのみを使用していますが、 )。これらのクラスの情報はデータベースから取得され、それぞれの親/子オブジェクトが同時に取得されます。これは、親オブジェクトを取得するとその子オブジェクトが取得され、その結果、すべての子オブジェクトが親オブジェクトを取得することになり、その結果、問題が発生します。

このループを防ぐために、オブジェクトをフェッチするメソッド内の関連オブジェクトにオプションのパラメーターを使用しています。このパラメーターは、オブジェクトの 1 つがその相対オブジェクトをフェッチする場合に割り当てられます。参照されているオブジェクトが 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

私はあなたの最初の仮定が適切ではないと思います:

これは、親オブジェクトを取得すると子オブジェクトが取得され、すべての子オブジェクトが親オブジェクトを取得する結果になるときに問題になります。その結果、アイデアが得られます。

メモリ内には同じオブジェクトのインスタンスが1つだけ存在するため、問題はありません。親オブジェクトと子オブジェクトのオブジェクトの参照のみがあります。実際のオブジェクトではありません。したがって、無限ループのように見えても、参照を持つことは安全です。

親オブジェクトとその子エンティティをフェッチする必要があります。チェックする必要はありません。

于 2013-01-22T13:55:00.447 に答える