有没有办法以一般方式将对象实例(对象A)与第二个对象(对象B)相关联,这样当收集B时,A变得可以收集?如果B有一个指向A的实例变量,但没有明确地改变B的类定义,并且能够以动态方式执行此操作,则会发生相同的行为吗?
通过以时髦的方式使用Component.Disposed事件可以完成同样的效果,但我不想让B一次性使用
修改
我基本上是创建一个与单个“root”对象关联的对象缓存,我不希望缓存是静态的,因为可能有很多根对象使用不同的缓存,所以很多当不再使用根对象但仍然存在高速缓存的对象时,内存将被用完。
因此,我希望将一组缓存对象与每个“根”对象相关联,而不更改根对象定义。类似于附加到每个根对象实例的额外对象引用的元数据。这样,收集根对象时会收集每个集合,而不会像使用静态缓存时那样挂起。
答案 0 :(得分:1)
简短回答:可能不是。你能解释一下你想要做的更多吗? WeakReference可能是您所需要的。
答案 1 :(得分:1)
public class RelatedReference<A, B>
{
private A a;
private B b;
public B Referent
{
get {return b;}
}
public RelatedReference(A a, B b)
{
this.a = a;
this.b = b;
}
}
然后在每个使用B的地方使用RelatedReference:
var Bref = new RelatedReference<A, B>(new A(), new B());
Bref.Referent.Foo();