Как Stream.Dispose(bool) вызывается методом Finalize?

Документы Stream.Dispose(bool) говорят:

Этот метод вызывается общедоступным методом Dispose и методом Finalize. [..] Finalize вызывает Dispose с установленным значением false.

Тем не менее, ни Stream ни его супер класс MarshalByRefObject есть деструктор, и деструктор Object пустой.

Так как можно Stream.Dispose(bool) быть вызванным Finalize метод?

1 ответ

Решение

Stream является абстрактным классом, поэтому вы гарантированно наследуете хотя бы один нижний уровень. В этом унаследованном классе существует финализатор.

Я не знаю их точных причин, но, возможно, одна из них может заключаться в том, что если вам не нужен финализатор, он не навязан вам из-за ненулевых накладных расходов на его наличие, при этом самая большая цена, связанная с вашим объектом, вероятно, не будет собрана во сборка мусора Gen 0, даже если она очень недолговечна (подробности см. в этой связанной статье).

Другие вопросы по тегам