class Main { CallBack cb; Main() { this.cb = new CallBack(this); } dispose(...) { cb.Dispose(); } destructor { dispose(false); } } class CallBack { WeakReference main; CallBack(Main main) { this.main = new WeakReference(main); IConnectionPoint something ...; something.Advise(this, out cookie); } dispose(..) { IConnectionPoint something ...; something.UnAdvise(cookie); } }