我有一个类(我们称之为a类),它包含一个指向“a类”的“参考类”(我们称之为参考类b)。
这将创建一个循环连接,如果对“class a”和“reference class b”的所有其他引用都将被删除,它们仍然会有引用它们的类。C# 中的垃圾收集是否足够强大,只能检测到这个内部循环,或者我是否需要在收集之前以某种方式破坏该链接(一旦所有外部链接都被破坏,这将是不可能的)
请参阅以下示例代码,了解两者如何相互引用。
Public Class ClassA
{
Private ReferenceClassB reference;
Public ClassA()
{
reference = new ReferenceClassB(this);
}
}
Public Class ReferenceClassB
{
Private ClassA referencedClass;
Public ReferenceClassB(ClassA reference)
{
referencedClass = reference;
}
}
如果将 ClassA 的版本设置为外部,然后设置为 null,则使用上述 2 个类,仍然存在对该 Object 的引用,同样与创建的 ReferenceClassB 对象一样。但是这些对象不会连接到“主程序”,所以理论上它们对于垃圾收集器来说是安全的清理,但实际的实现是否足够聪明以摆脱它们?