静态成员变量曾经获得垃圾回收吗?

例如,让我们使用以下类。

public class HasStatic {
    private static List<string> shared = new List<string>();

}

并假设它是这样使用的:
//Startup
{
HasStatic a = new HasStatic();
HasStatic b = new HasStatic();
HasStatic c = new HasStatic();
HasStatic d = new HasStatic();
//Something
}
//Other code
//Things deep GC somewhere in here
HasStatic e = new HasStatic();

abcd被垃圾回收时,静态成员shared也会被回收吗? e是否可能获得shared的新实例?

最佳答案

不,静态成员与Type关联,Type与它所加载的AppDomain关联。

请注意,对于要初始化的类,无需存在HasStatic的任何实例,并且shared变量不必具有对List<string>的引用。

除非您考虑卸载AppDomain的情况,否则可以将静态变量永远视为GC根。 (当然,如果某些更改了HasStatic.shared的值以引用其他实例,则第一个实例可能有资格进行垃圾回收。)

10-05 19:17