黑马程序员——对委托的初步理解

    今天看到论坛里有人问委托的问题,想想自己也搞不懂委托到底是什么东西,好像以前稍微看过一点但没具体怎么看,所以今天就看了一些资料。

    看完后,我的理解是这样的,这只是初步的理解,不对的请见谅,希望提出来,共同进步。

    委托呢其实就是一个方法的大集合,就像枚举一样,它把要用的方法都存到了里面,当要调用什么方法的时候就直接写出这个方法的名字,就能够实现调用,特别方便,避免了复杂的判断过程,这样说可能很难理解,我在博客原理看的一篇讲解文章,人家举了一个相当浅显易懂的例子。

    列子如下:

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();
          

        }

看出来了吧,委托就是这样简单,说白了就是委托给谁去办这件事。

原文地址:https://www.cnblogs.com/weiwin/p/2570368.html