zoukankan      html  css  js  c++  java
  • 回复一个朋友:如何理解委托

    我们知道,函数参数支持整形,数组,字符串等各种类型,例如一个简单的问候函数如下

    static void Main(string[] args)
            {
                SayHi("liwanbao");
                Console.Read();
            }
    
    
            static  void SayHi(string texts)
            {
                Console.WriteLine("Hello " + texts); 
            }

    这是非常简单的一个console 程序。调用SayHi只要传递一些字符串即可。

    可是,我们希望调用函数时,函数的参数可以是函数,那么怎么办呢?于是微软给出了委托。例如我想做一个中文版的SayHi和一个英文版的SayHi,那么我先定义中文版和英文版

    函数。

     public void GoodMoning(string words)
        {
            Response.Write("Hello "+words);
        
        }
    
    
        public void GoodMoningCN(string words)
        {
            Response.Write("你好 "+words);
    
        }
    

      接下来,最主要的了我要怎么修改SayHi函数呢?似乎SayHi应该类似这样定义,第一个参数是GoodMoning(){}  这就是一个标准的C#函数定义模式,第二个参数保持不变

      static  void SayHi(
                    GoodMoning(){}, 
    string texts ) { Console.WriteLine("Hello " + texts); }

      

    但是刚才我们说了,c#函数参数是不能传递函数的,所以,微软给出了委托。委托的出现似的函数可以当做类一样的功能被调用。

          delegate void Say(string word);
    
            static  void SayHi(Say say, string texts )
            {
                say("Hello " + texts); 
            }
    

    然后在Main里调用,完整代码如下,现在可以看到了,SayHi函数可以以函数作为参数了。

      static void Main(string[] args)
            {
    
    
                SayHi(GoodMoning, "xx");
                Console.Read();
            }
    
             delegate void Say(string word);
    
            static  void SayHi(Say say, string texts )
            {
                Console.WriteLine("Hello " + texts); 
            }
    
    
            static void GoodMoning(string words)
            {
                Console.WriteLine("Hello " + words);
    
            }
    
    
            static void GoodMoningCN(string words)
            {
                Console.WriteLine("你好 " + words);
    
            }

    基本上,如果学完了上面,你对委托应该了解了。

  • 相关阅读:
    《你不知道的javascript》读书笔记2
    你不知道的console调试
    《你不知道的javascript》读书笔记1
    使用js做LeetCode
    用装饰器来进行登录验证
    python 解压序列
    pycharm 的live_template的使用
    faker 库的使用
    Python常用内置类和常用内置函数汇总
    迭代器 ,生成器(生成器函数/生成器表达式)
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/4762317.html
Copyright © 2011-2022 走看看