В настоящее время я работаю над исправлением кодовой базы С#, которая не имеет хорошего шаблона использования Dispose.
Это большая кодовая база, ресурсоемкая кодовая база, использующая множество пользовательских неуправляемых библиотек C++ на низком уровне.
Я хорошо понимаю шаблон dispose. Я потратил некоторое время на то, чтобы понять, что я считаю статьей золотого стандарта по этому вопросу: Статья Джо Даффи об утилизации
Пытаясь свести к минимуму дублирование кода, мы рассмотрели некоторые вспомогательные классы удаления, и поэтому мой вопрос:
Если базовый класс реализует стандартный шаблон Dispose, он должен разрешить совместное использование флага disposed, т.е. отмечен как защищенный?
Чтобы уточнить, я имею в виду, должно ли быть только одно логическое состояние в иерархии наследования, которое определяет, был ли экземпляр объекта удален, или должно быть частное логическое значение на каждом шаге лестницы наследования?
Примеры в MSDN и по приведенной выше ссылке устанавливают флаг на каждом уровне, но никогда не объясняют причину этого. Я в раздумьях по этому вопросу, каковы ваши мысли и причины?