什么时候在静态类中声明的对象会被垃圾收集?

时间:2011-03-10 07:53:19

标签: c# static garbage-collection dispose

 public static class stClass
{
    static Class1 obj = new Class1();

    public static int returnSomething()
    {
        return 0;
    }
}

Class1中的obj实例stClass何时会收集垃圾,如果我在其他非静态类中调用静态函数stClass.returnSomething()

注意:Class1 不是静态的

3 个答案:

答案 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关闭时让终结器运行。

*当应用关闭时,即使终结器也不会被保证