在C#代码中,我有三个对象 A , B 和 C 。 A 和 B 均包含对 C 的引用。当 A 被销毁时,我希望删除 B 到 C 的引用,以便 C 可以被垃圾收集器摧毁。
有没有办法在不从 B 手动删除它的情况下执行此操作? ( C 中的析构函数在从 B 到 C 的引用被删除之前未被调用,因此在此处无效。)
答案 0 :(得分:10)
它闻起来像是WeakReference:
的工作弱引用允许垃圾 收集器收集对象时 还是允许申请 访问该对象。如果你需要的话 对象,你仍然可以获得强大的 引用它并防止它 被收集。
听起来你应该通过WeakReference从B到C引用,而不是直接引用。
答案 1 :(得分:7)
首先,定义“删除”。然后考虑使用WeakReference类。
答案 2 :(得分:5)
解决方案1
B是否从您应用程序中的任何其他位置引用?
如果B只能通过A访问,那么当A被“删除”时,B和C将被“删除”。
解决方案2
当A被“移除”时,您应该向B发送信号。如果A知道B,则可以从A发信号B.我会使用IDisposable模式进行此
解决方案3
您可以使用B中的WeakReference来转到C,而不是直接从B引用C.