• 回复一个朋友:如何理解委托


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

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

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

  • 相关阅读:
    flask ajax
    python 符合条件跳过下一次循环
    python使用openpyxl excel 合并拆分单元格
    等价类划分法
    python 同级目录包导入问题,使用"."错误
    django:查询,反向查询
    Python实现程序执行次数的计数
    python 2x SSH通道连接服务器读取数据库和中文编码问题
    Python for 循环中使用append()添加可变元素,前面的值被覆盖,循环中内存应用地址不变
    以概率列表选择对应元素,轮盘概率选择Python实现
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/4762317.html
Copyright © 2020-2023  润新知