1

我有一个Object A可以随意生产的系统Object B。一个Object A可以产生任意数量的Object B,并且有多个Object A

Object A在我的程序中知道哪个产生了哪个Object B(出于各种原因)很有用。目前,每当Object B创建 an 时,我只是将Object A创建它的作为参数存储在Object B. 但这对我来说感觉不对。

问题1:有没有办法简单地存储对正确Object A内部的引用Object B,而不是整个对象?或者这实际上是怎么回事?

问题2:这样做是不是我现在的记忆效率低下?

4

3 回答 3

2

问题一:

对的,这是可能的。您可以传递对创建者对象的引用,例如通过构造函数。它也可以是公共属性设置器或公共字段,但我建议使用构造函数。

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/8bytes承担32bit/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 回答