委托就是定义了方法的类型,就想"hello" 的类型是String 类型一样。
例如:下面的委托例子
1 namespace delegate_tesst 2 { 3 public delegate void SayDelegate(string name); 4 public class ClassPeople 5 { 6 public void saychinese(string name) 7 { 8 Console.WriteLine("你好,"+name ); 9 } 10 public void sayenglish(string name) 11 { 12 Console.WriteLine("hello ,"+name); 13 } 14 public void dowork(string name, SayDelegate MakeSay)//此方法它接收一个SayDelegate类型的方法做为参数 15 { 16 MakeSay(name); 17 } 18 } 19 class Program 20 { 21 static void Main(string[] args) 22 { 23 ClassPeople c1 = new ClassPeople(); 24 //委托 25 Console.WriteLine("下面是委托:"); 26 SayDelegate saymethod1 = c1.saychinese; 27 SayDelegate saymethod2 = c1.sayenglish; 28 c1.dowork("张三", saymethod1); 29 c1.dowork("zhangsan", saymethod2); 30 31 32 //多播委托 33 Console.WriteLine("下面是多播委托:"); 34 SayDelegate saymethod = c1.saychinese; 35 saymethod += c1.sayenglish; 36 c1.dowork("zhangsan",saymethod); 37 38 Console.ReadKey(); 39 } 40 } 41 }
我们声明了委托,和多播委托。这里方法的类型就是SayDelegate类型。
他和我们以前定义的对象区别在于:
以前我们定义的对象都包含数据,而委托包含的只是方法的地址。