Полный шаблон, включая финализатор, введение нового виртуального метода и «запечатывание» оригинального метода удаления, является очень общим назначением, охватывающим все основы.
Если у вас нет прямых дескрипторов на неуправляемых ресурсах (которые должны быть почти никогда ), вам не нужен финализатор.
Если вы запечатываете свой класс (и мои взгляды на классы запечатывания, где это возможно, вероятно, уже хорошо известны - дизайн для наследования или запрет его ) нет смысла вводить виртуальный метод.
Я не могу вспомнить, когда в последний раз я реализовал IDisposable
"сложным" способом по сравнению с самым очевидным способом, например,
public void Dispose()
{
somethingElse.Dispose();
}
Стоит отметить, что если вы собираетесь получить действительно надежный код, вы должны убедиться, что вы ничего не пытаетесь сделать после того, как вас утилизировали, и выбросить ObjectDisposedException
где уместно. Это хороший совет для библиотек классов, которые будут использоваться разработчиками по всему миру, но это очень большая работа, которая принесет очень мало пользы, если это будет просто класс, используемый в вашем собственном рабочем пространстве.