Когда объект, объявленный в статическом классе, получает мусор?
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 отключается.
* Даже при завершении приложения даже финализатор не может быть вызван.