Полный шаблон, включающий финализатор, введение нового виртуального метода и «запечатывание» исходного метода размещения, является очень общим назначением, охватывающим все базы.
Если у вас нет прямые ручки на неуправляемых ресурсов (которые должны быть almostnever) вам не нужны финализации.
Если вы запечатываете свой класс (и мои взгляды на классы герметизации, где это возможно, вероятно, хорошо известны к настоящему времени - design for inheritance or prohibit it), нет смысла вводить виртуальный метод.
Не могу вспомнить последний раз, когда я осуществил IDisposable
в «сложном» способе, и сделал это наиболее очевидным образом, например.
public void Dispose()
{
somethingElse.Dispose();
}
Единственное, что следует отметить, что если вы собираетесь действительно надежный код, вы должны убедитесь, что вы не пытаетесь сделать что-либо после того, как вы избавились, и бросить ObjectDisposedException
где это уместно , Это хороший совет для библиотек классов, которые будут использоваться разработчиками по всему миру, но это очень большая работа для получения очень небольшого выигрыша, если это будет только класс, используемый в вашем собственном рабочем пространстве.
В моем классе у меня есть только неуправляемые ресурсы, которые нуждаются в очистке, и я реализую IDisposable с защищенным виртуальным void Dispose (bool disposing), который заставляет его выполнять статический анализ. В моем случае параметр «disposing» не имеет смысла, поскольку я бы хотел, чтобы Finalizer и Dispose выполняли то же самое. – AksharRoop