事件---------2
接着委托:
声明之前要定义委托。
实际应用中:
public class GreetingManager{ //在类内部声明delegate变量 public GreetingDelegate delegate1; public void GreetPeople(sting name){ if(delegate1!=null){ delegate1(name); } } }
GreetingManager gm=new GreetingManager(); gm.delegate=EnglishGreeting; gm.delegate+=ChineseGreeting; gm.GreetPeople("Jimmy Zhang");
delegate1若为public,则客户端对他不可见根本没用;private客户端随意赋值破坏封装性。
第一个用=第二个用+=,感觉不好。
所用Event出现了,它封装了委托类型的变量。类似string类型的属性对字段的封装。使得:在类的内部,不管声明的是public还是protected,它总是private的。在类的外部,注册“+=”和注销“-=”的访问限定符与你声明事件时使用的访问符相同。
上述改写为:
publice class GreetingManager{ //这一次我们在这里声明一个事件 public event GreetingDelegate MakeGreer; public void GreetPeople(string name){ MakeGreet(name); } }
GreetingManager gm=new GreetingManager(); gm.MakeGreet+=ChineseGreeting; gm.GreetPeople("Jimmy Zhang");
MakeGreet被声明为私有的不能用“=”赋值。有两个方法add、remove对应+=和我-=。