我们知道,函数参数支持整形,数组,字符串等各种类型,例如一个简单的问候函数如下
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); }
基本上,如果学完了上面,你对委托应该了解了。