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

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

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

        }

 

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

 

posted @ 2015-08-27 09:24  启明星工作室  阅读(356)  评论(0编辑  收藏  举报