Предполагая, что это традиционный шаблон Dispose (взятый из devx, но встречается на многих веб-сайтах)
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposing)
{
// Code to dispose the managed resources of the class
}
// Code to dispose the un-managed resources of the class
isDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
Я не понимаю, почему мы звоним GC.SupressFinalize(this)
. Это требует, чтобы я написал свое собственное управление управляемыми ресурсами, включая обнуление моих ссылок? Должен признать, я немного растерялся. Может ли кто-нибудь пролить свет на эту закономерность?
В идеале я хотел бы только избавиться от моих неуправляемых ресурсов и позволить сборщику мусора выполнять управляемый сбор самостоятельно.
Собственно, я даже не знаю, зачем мы указываем финализатор. В любом случае, кодер должен звонить сам, не так ли? Если это просто резервный механизм, я бы его удалил.