事件---------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对应+=和我-=。

posted @ 2012-08-15 13:31  yzj1212  阅读(115)  评论(0编辑  收藏  举报