Полагаю, это явный случай шаблона шаблонов.
Ваш абстрактный класс предназначен для выполнения всех необходимых / необходимых задач (здесь GC.SuppressFinalize (this)) и позволяет производному классу переопределять только некоторую часть кода.
Здесь есть 2 случая:
Фрагмент 1, SuppressFinalize, в Dispose
Фрагмент 2, SuppressFinalize, в Dispose (true)
Здесь, фрагмент 1, гарантирует, что GC.SuppressFinalize всегда выполняется. В то время как фрагмент 2, оставляет выполнение GC.SuppressFinalize во власти производного класса .
Итак, поместив GC.SuppressFinalize в метод Dispose, вы, как разработчик вашего класса, всегда будете уверены, что независимо от того, какой код написан производными классами, GC.SuppressFinalize будет выполняться.
Это только преимущество написания SuppressFinalize в Dispose, а не Dispose (true).