委托和多播委托

刚刚学习了委托的内容,先来说一下自己对委托的理解,权当是复习吧:

委托可以定义在类里面,也可以定义在类外面,如果定义在类里面就只能被这个类调用,不论声明它是public 还是private。如果定义在类外面就能被所有类调用。如果程序是多线程的,委托方法希望能在UI层调用,那么可以在命名空间下定义。

//委托的声明 delegate关键字,这个委托只能代表返回值是空、参数是一个string类型的一个方法
public delegate void GreetingDelegate(string name);
private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
  MakeGreeting(name);
}
//传入的是什么方法,MakeGreating就是那个方法,比如有一个方法满足委托所需的条件,返回值是void,参数是string类型的,个数是一个:
private static void EnglishGreeting(string name)
{
  Console.WriteLine("Morning, " + name);
}
//那么他就可以被委托
GreetPeople("Jimmy Zhang", EnglishGreeting);
//传入的是EnglishGreeting方法,那么GreetPeople中的MakeGreeting就是EnglishGreeting,自然就会去执行EnglishGreeting方法

//另外一种形式
GreetingDelegate delegate1;
delegate1 = EnglishGreeting;//委托对象只能赋值方法名,不能接括号和参数

多播委托:使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。但是这些方法必须具有相同的参数类型和返回值类型:

GreetingDelegate delegate1;
delegate1 = EnglishGreeting;
delegate1 += ChineseGreeting;
...

委托绑定/取消绑定方法的方法:+=或-=(也可以称之为注册方法)

给委托添加绑定或取消绑定方法时,委托里面一定要已经有了方法才行

posted @ 2014-11-08 22:52  湘大小生  阅读(229)  评论(0编辑  收藏  举报