.net Delegate
委托和事件这两个概念是完全配合的。委托可以看成是函数指针,那就是说,它能够引用对象方法,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个对象方法,将其作为它构造函数的参数。
每一个委托都有自己的签名,例如:Delegate int SomeDelegate(string s, bool b);是一个委托声明,在这里,提及的签名,就是说SomeDelegate 这个委托有 string 和 bool 类型的形参,返回一个int 类型。
上面提及的:当你对委托实例化时,要提供一个对象方法(引用函数),将其作为它构造函数的参数。这里要注意了:被引用的这个函数必须和委托有相同的签名。
Demo:
1 using System; 2 3 namespace ConsoleApplication3 4 { 5 public delegate void GreetingDelegate(string name);//声明委托 6 class Program 7 { 8 public static void GreetPeople(string name, GreetingDelegate gd)//委托形参 9 { 10 gd(name); 11 } 12 public static void EnglishGreeting(string name) 13 { 14 Console.WriteLine("morning, " + name); 15 } 16 public static void ChineseGreeting(string name) 17 { 18 Console.WriteLine("早上好, " + name); 19 } 20 static void Main(string[] args) 21 { 22 GreetPeople("周鸿", ChineseGreeting);//方法作为委托对象 23 GreetPeople("chouhom", EnglishGreeting); 24 Console.ReadKey(); 25 } 26 } 27 }
Resut: