using System;
public class A
{
~public A()
{
Console.WriteLine("Destructor instance of A");
}
public void F()
{
Console.WriteLine("Call A.F()");
Test.a = this;
}
}
public class B
{
private A a = null;
public void SetA(A a)
{
this.a = a;
}
~public B()
{
Console.WriteLine("Destructor instance of B");
a.F();
}
}
public class Test
{
public static A a = null;
public static B b = null;
static void Main()
{
b = new B();
a = new A();
b.SetA(a);
b = null;
a = null;
GC.Collect();
GC.WaitForPendingFinalizers();
if(a != null)
Console.WriteLine("a is not null");
}
}
当垃圾回收器首先执行A的析构函数的时候,有以下的输出:
Destructor instance of A
Destructor instance of B
Call A.F()
当执B的析构函数时可能使本来没有被引用的A的实例现在被Test.a进行引用,致使B对象符合回收条件而A不具备回收条件。
问题:
1.>A的析构函数不是首先被调用的吗?难道对象被析构后在其他范围内还可以被引用吗?(包括在其他析构函数中或程序入口点中)
2.>A的析构函数执行后还可以正常使用吗?,对A来说执行析构函数后A收到影响了吗?请您详细的解释一下!