zoukankan      html  css  js  c++  java
  • 黑马程序员——对委托的初步理解

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

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

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

        列子如下:

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

            }

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

  • 相关阅读:
    【基础算法】- 全排列
    【基础算法】- 2分查找
    区块链培训
    Static Binding (Early Binding) vs Dynamic Binding (Late Binding)
    test
    No data is deployed on the contract address!
    "throw" is deprecated in favour of "revert()", "require()" and "assert()".
    Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
    京都行
    Failed to write genesis block: database already contains an incompatible
  • 原文地址:https://www.cnblogs.com/weiwin/p/2570368.html
Copyright © 2011-2022 走看看