public static class stClass
{
static Class1 obj = new Class1();
public static int returnSomething()
{
return 0;
}
}
Class1
中的obj
实例stClass
何时会收集垃圾,如果我在其他非静态类中调用静态函数stClass.returnSomething()
?
注意:Class1
不是静态的
答案 0 :(得分:18)
从不,因为obj
没有实现IDisposable
。
如果你的意思是obj
什么时候垃圾收集那么答案仍然永远不会 - 静态字段永远不会被垃圾收集,所以obj
引用的对象只会变成如果将obj
设置为null(或其他某个对象)并且没有对该对象的其他引用,则有资格进行垃圾回收:
obj = null;
(或者如果您的app域已卸载/流程已结束)
答案 1 :(得分:3)
它永远不会被处置,因为它没有实现IDisposable。但是它会收集垃圾。退出应用程序或销毁创建该类的AppDomain时会发生这种情况。
答案 2 :(得分:0)
如果Class1实现了IDisposable接口&有一个终结器,运行时将尝试在卸载appdomain时调用终结器*。如果Class1正确地跟随dispose pattern,则终结器应该调用dispose(false)。这将是卸载Class1实例使用的任何非托管资源的正确时间。
但是,在处理使用非托管资源的对象时,您应该努力控制对象生命周期,而不是仅仅在appdomain关闭时让终结器运行。
*当应用关闭时,即使终结器也不会被保证。