今天看到论坛里有人问委托的问题,想想自己也搞不懂委托到底是什么东西,好像以前稍微看过一点但没具体怎么看,所以今天就看了一些资料。
看完后,我的理解是这样的,这只是初步的理解,不对的请见谅,希望提出来,共同进步。
委托呢其实就是一个方法的大集合,就像枚举一样,它把要用的方法都存到了里面,当要调用什么方法的时候就直接写出这个方法的名字,就能够实现调用,特别方便,避免了复杂的判断过程,这样说可能很难理解,我在博客原理看的一篇讲解文章,人家举了一个相当浅显易懂的例子。
列子如下:
public void EnglishGreeting(string name) {
Console.WriteLine("Morning, " + name);
}
public void ChineseGreeting(string name){
Console.WriteLine("早上好, " + name);
}
public enum Language{ //定义枚举
English, Chinese
}
public void GreetPeople(string name, Language lang){
swith(lang){
case Language.English:
EnglishGreeting(name);
break;
case Language.Chinese:
ChineseGreeting(name);
break;
}
}
大家看到了,上面有两个方法一个是中文问好:ChineseGreeting,一个英文:Console.WriteLine("Morning, " + name);
由于遇到中国人要用中文方法,外国人要用英文方法,所以就得定义个枚举用swith case进行判断,这是不是很麻烦??
还好有委托帮咱们大忙,修改上面的代码
public delegate void GreetingDelegate(string names); //委托
class Program
{ private static void EnglishGreeting(string name) {
Console.WriteLine("Morning, " + name);
}
private static void ChineseGreeting(string name) {
Console.WriteLine("早上好, " + name);
}
//注意多了个参数makegreeting,这个参数就是指定委托哪个方法去执行
private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
调用GreetPeople
static void Main(string[] args)
{
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
Console.ReadKey();
}
看出来了吧,委托就是这样简单,说白了就是委托给谁去办这件事。