Как Stream.Dispose(bool) вызывается методом Finalize?
Документы Stream.Dispose(bool) говорят:
Этот метод вызывается общедоступным методом Dispose и методом Finalize. [..] Finalize вызывает Dispose с установленным значением false.
Тем не менее, ни Stream
ни его супер класс MarshalByRefObject
есть деструктор, и деструктор Object
пустой.
Так как можно Stream.Dispose(bool)
быть вызванным Finalize
метод?
1 ответ
Stream
является абстрактным классом, поэтому вы гарантированно наследуете хотя бы один нижний уровень. В этом унаследованном классе существует финализатор.
Я не знаю их точных причин, но, возможно, одна из них может заключаться в том, что если вам не нужен финализатор, он не навязан вам из-за ненулевых накладных расходов на его наличие, при этом самая большая цена, связанная с вашим объектом, вероятно, не будет собрана во сборка мусора Gen 0, даже если она очень недолговечна (подробности см. в этой связанной статье).