protected virtual void Dispose(bool disposing)
            {
                var subject  = _subject;
                var observer = _observer;

                if (subject != null && observer != null)
                {
                    subject.Unsubscribe(observer);
                }

                _subject  = null;
                _observer = null;
            }
            public Subscription(SubjectSlim <T2> subject, IObserver <T2> observer)
            {
                if (subject == null)
                {
                    throw new ArgumentNullException("subject");
                }
                if (observer == null)
                {
                    throw new ArgumentNullException("observer");
                }

                _subject  = subject;
                _observer = observer;
            }