Employee obj = new Employee();
obj.Dispose(); //statement 1;
obj = null; //statement 2
По какому оператору сборщик мусора удалит объект?
Что именно будет происходить за кулисами операторов 1 и 2
Employee obj = new Employee();
obj.Dispose(); //statement 1;
obj = null; //statement 2
По какому оператору сборщик мусора удалит объект?
Что именно будет происходить за кулисами операторов 1 и 2
Это могло быть что угодно или ничего.
Если конструктор по умолчанию и метод Dispose
не имеют побочных эффектов и компилятор может это видеть, он может полностью пропустить генерацию кода для вашего фрагмента, считая все это бездействующим.
В качестве альтернативы, если только метод Dispose
не работает, тогда сборщик мусора может собрать объект сразу после этой строки:
Employee obj = new Employee();
В качестве альтернативы, если сборщик мусора может доказать, что объект больше не читается после Dispose
(даже если он все еще находится в области видимости), он может собрать объект сразу после этой строки:
obj.Dispose();
В качестве альтернативы, если GC не может доказать что-либо из этого, он может сделать это в любое время после этой строки:
obj = null;
В качестве альтернативы, если сборщик мусора не видит необходимости повторно использовать память, он может вообще не собирать объект во время всего выполнения программы.