发现一个问题,如果是类的继承,就像Observer 和ConcreteObserver之间,父类中有个字段aSubject被设置成protected的访问级别,当然可以被子类ConcreteObserver引用到,同时这个字段也作了get/set的Property属性!那么在子类ConcreteObserver中的函数用哪个?
public override void Update()
{
// 第一种 用Property :this.ObservedSubject
System.Console.WriteLine("In Observer {0} : DataFrom subject {1}" ,
strObserverName,this.ObservedSubject.ImportantSubjectData);
// 第二种 用Protected : aSubject
System.Console.WriteLine("In Observer {0} : DataFrom subject {1}" ,
strObserverName,aSubject.ImportantSubjectData);
}
其实两个都可以,因为Property也可以被子类访问,一般来说不应该有两个出口给子类的,
想讨论一下,Property在什么情况下被使用。
很显然protected 的初衷就是为了继承用的,我认为此处使用Protected !
完整地代码参见 Observer 代码