public void HasMultipleObserver_And_GenericParams()
        {
            CObserverSubject <int> pObserverSubject = new CObserverSubject <int>();

            _TestValue = 0;

            pObserverSubject.DoRegist_Listener(AddField_HasParam);
            Assert.IsTrue(_TestValue == 0);

            pObserverSubject.DoNotify(5);
            Assert.IsTrue(_TestValue == 5);

            pObserverSubject.DoRegist_Listener(MinusField_HasParam);
            pObserverSubject.DoNotify(6);
            Assert.IsTrue(_TestValue == 5); // Add 6, Minus 6을 했기 때문에 원본값 그대로입니다.

            pObserverSubject.DoRemove_Listener(AddField_HasParam);

            pObserverSubject.DoNotify(5);
            Assert.IsTrue(_TestValue == 0);
        }
        public void Regist_And_InstantNotify()
        {
            CObserverSubject <int> pObserverSubject = new CObserverSubject <int>();

            _TestValue = 0;
            Assert.IsTrue(_TestValue == 0);

            pObserverSubject.DoNotify(5);
            Assert.IsTrue(_TestValue == 0);                              // 등록되있는 Listener가 없기 때문에 변동이 없습니다.

            pObserverSubject.DoRegist_Listener(AddField_HasParam, true); // 뒤늦게 요청했을 때, 2번째 인자가 true면 최신값을 받을 수 있습니다.
            Assert.IsTrue(_TestValue == 5);                              // 최신값을 받았기 때문에 값이 변했습니다.

            pObserverSubject.DoRemove_Listener(AddField_HasParam);       // 이때 Add를 지웠기 때문에 이제 리스너가 없어 TestValue는 변하지 않습니다.
            pObserverSubject.DoNotify(6);
            Assert.IsTrue(_TestValue == 5);

            pObserverSubject.DoRegist_Listener(AddField_HasParam); // 뒤늦게 요청했을 때 2번째 인자를 안넣으면 값은 갱신되지 않습니다.
            Assert.IsTrue(_TestValue == 5);

            pObserverSubject.DoNotify(-5); // AddField Listener가 하나 존재하기 때문에, 값은 0이 됩니다.
            Assert.IsTrue(_TestValue == 0);
        }