1

Object A私は自由に生産できるシステムを持っていますObject B。1つObject Aは任意の数を生成できObject B、複数Object Aの'があります。

私のプログラムでは、 (さまざまな理由で)Object Aどれがどれを生成したかを知ることが役立ちます。Object B現在、が作成されるたびに、それを作成したものをパラメータとして内にObject B保存します。しかし、これは私には正しく感じられません。Object AObject B

質問1:オブジェクト全体ではなく、正しいものへの参照を単に格納する方法はありObject Aますか?Object Bそれとも、それは実際にとにかく何が起こっているのですか?

質問2:私が今記憶に対して非効率的である方法でそれをしていますか?

4

3 に答える 3

2

質問1:

はい、可能です。コンストラクターなどによって、作成者オブジェクトへの参照を渡すことができます。パブリックプロパティセッターまたはパブリックフィールドによる場合もありますが、コンストラクターを使用することをお勧めします。

public class ObjectB
{
    public ObjectA Parent {get; private set;}

    public ObjectB(ObjectA parent)
    {
        this.Parent = parent;
    }
}

public class ObjectA
{
    private ObjectB GetNewObjectB()
    {
         return new ObjectB(this);
    }
}

質問2:

オブジェクト参照4bytes/8bytes32bit/64bit OS。したがって、追加のメモリ消費量を大まかに想像して、それが問題であるかどうかを判断できます(私見では、ほとんどのアプリケーションでは問題になりません)。

于 2013-02-03T19:32:29.423 に答える
0

質問1:はい-もしあなたが持っているなら

class A {}

class B
{
  A creator;
}

その場合、「作成者」参照はまさにそれです。コンテンツ自体のコピーではなく、オブジェクトインスタンスへのポインタです。

質問2:これに答えるのに十分な情報がないと思います-Bに格納されている参照が必要な場合は、非効率的ではありません。無効になってよければ、WeakReferenceに変換することをお勧めします。

于 2013-02-03T19:10:41.027 に答える
0

クラスは参照型であるため、クラスBにクラス型のフィールドがある場合、オブジェクト全体のコピーではなく、Aのインスタンスへの参照のみがフィールドに格納されます。A

class B
{
    //creator is a reference to the instance of A which created this instance
    private A creator;
}
于 2013-02-03T19:10:50.577 に答える