我有一个Object A
可以产生Object B
的系统。一个Object A
可以生成任意数量的Object B
,并且有多个Object A
。
在我的程序中,了解哪个Object A
生成Object B
(由于各种原因)非常有用。目前,每当创建Object B
时,我只会将创建它的Object A
存储为Object B
内的参数。但这对我来说并不合适。
问题1:有没有办法只存储Object A
内的正确Object B
的引用,而不是整个对象?或者这实际上是发生了什么?
问题2:这样做的方式我现在对内存效率不高吗?
答案 0 :(得分: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/8bytes
上32bit/64bit OS
。所以你可以大致想象额外的内存消耗,并确定,如果它是一个问题(恕我直言,这对大多数应用程序来说不是问题)。
答案 1 :(得分:0)
问题1:是 - 如果你有
class A {}
class B
{
A creator;
}
然后'creator'引用就是 - 指向对象实例的指针而不是内容本身的副本。
问题2:我认为我没有足够的信息来回答这个问题 - 如果你需要存储在B中的参考,那么效率不高。如果你对它变得无效感到高兴,你可能想把它变成WeakReference。
答案 2 :(得分:0)
类是引用类型,因此如果您的类B
具有类型类A
的字段,则只有对A
实例的引用存储在字段中,而不是副本整个对象。
class B
{
//creator is a reference to the instance of A which created this instance
private A creator;
}