Когда объект, объявленный в статическом классе, получает мусор?

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

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

Когда экземпляр Class1 obj в stClass получит сбор мусора, если я вызываю статическую функцию stClass.returnSomething() в каком-то другом нестационарном классе?

Примечание: Class1 не статично

Ответ 1

Никогда, поскольку obj не реализует IDisposable.

Если вы имеете в виду, когда obj получит собранный мусор, тогда ответ все равно никогда - статические поля никогда не собираются с мусором, поэтому объект, который ссылается на obj, станет доступным только для сбора мусора если вы установите для параметра obj значение null (или какой-либо другой объект) и не имеете других ссылок на этот объект:

obj = null;

(или если ваш домен приложения выгружен/процесс завершен)

Ответ 2

Он никогда не получит расположен, поскольку он не реализует IDisposable. Однако он получит сбор мусора. Это произойдет при выходе из приложения или уничтожении AppDomain, в котором был создан класс.

Ответ 3

Если Class1 реализует интерфейс IDisposable и имеет финализатор, среда выполнения попытается вызывать финализатор при выгрузке appdomain *. Если Class1 следует за удалить шаблон, финализатор должен вызвать dispose (false). Это было бы правильное время для выгрузки любых неуправляемых ресурсов, используемых экземпляром Class1.

Однако при работе с объектом, который использует неуправляемые ресурсы, вы должны стремиться больше контролировать жизненный цикл объекта, а не просто запускать финализатор, когда appdomain отключается.

* Даже при завершении приложения даже финализатор не может быть вызван.