Когда-то давно я разобрался в и так несложном интерфейсе IDisposable и сделал "правильный" пример реализации, по сути, просто откомментировав код с MSDN, для лучшего понимания, зачем и почему нужно делать именно так:
class DisposableExample: IDisposable {
#region Абсолютный минимум кода, который должен быть написан в правильной реализации IDisposable
///
/// Поле, где будет true, если объект уже пытались уничтожить.
///
private bool isDisposed = false;
///