Это следующий вопрос к этому вопросу:
шаблон Finalize / Dispose в C #
Итак, я понимаю, что если я создаю класс, использующий неуправляемые ресурсы, я должен их удалить. Ответ на связанный вопрос говорит о том, что финализатор избавляется от неуправляемых ресурсов. Однако метод Dispose(Boolean)
также избавляется от неуправляемых ресурсов:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// get rid of managed resources
}
// get rid of unmanaged resources
}
Так в чем же разница между удалением финализатора и удалением метода удаления?
Dispose
-метод с флагомfalse
. - person HimBromBeere   schedule 22.01.2019Dispose
вызывается вручную (обычно при выходе из областиusing
). - person Dmitry Bychenko   schedule 22.01.2019GC.SuppressFinalize(this)
). Таким образом, финализатор должен каким-то образом избавиться от неуправляемых ресурсов, а Dispose () должен избавиться как от неуправляемых, так и от управляемых ресурсов. Это то, что покрывает шаблон Dispose. - person Matthew Watson   schedule 22.01.2019