在C#代码,我有三个对象甲,乙和Ç.A和B各自持有对C的引用.当A被销毁时,我希望删除从B到C的引用,以便C可以被垃圾收集器销毁.
有没有办法这样做而不从B手动删除它?(在删除从B到C的引用之前,不会调用C中的析构函数,因此在此处无效.)
它闻起来像WeakReference的工作:
弱引用允许垃圾收集器收集对象,同时仍允许应用程序访问该对象.如果您需要该对象,您仍然可以获得它的强引用并防止它被收集.
听起来你应该通过WeakReference从B到C引用,而不是直接引用.
首先,定义"删除".然后考虑使用WeakReference类.
解决方案1
B是否从您应用程序中的任何其他位置引用?
如果B只能通过A访问,那么当A被"删除"时,B和C将被"删除".
解决方案2
当A被"移除"时,您应该向B发送信号.如果B已知A,则可以从A发信号B.我会使用IDisposable模式
解决方案3
您可以使用B中的WeakReference转到C,而不是直接从B引用C.