一、委托:也是一个类,继承自System.MulticastDelegate。可以理解为:A想找个女朋友(C),B是婚介所,A委托B帮忙能找到C。
二、示例:
1 //定义一个带有参数的委托,委托的参数类型要跟AppleCompany类中的四个方法保持一致,都是Int32类型,委托其实就是个类,一般为了调用方便都声明在命名空间Delegate_01中. 2 public delegate void Dele(Int32 num); 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 DigitalFactory df = new DigitalFactory(); 8 df.MakeDigitals(AppleCompany.MakeIphone, 200); 9 df.MakeDigitals(new AppleCompany().MakeIpad, 200); 10 df.MakeDigitals(new AppleCompany().MakeImac, 200); 11 df.MakeDigitals(new AppleCompany().MakeIpod, 200); 12 } 13 } 14 15 //在DigitalFactory创建一个带有委托参数的方法,用来传递方法,然后通过委托调用具体方法 16 public class DigitalFactory 17 { 18 public void MakeDigitals(Dele dele, Int32 Number) 19 { 20 if (dele != null) 21 { 22 dele(Number); 23 Console.WriteLine("Target:" + dele.Target + ",Method:" + dele.Method.Name); 24 } 25 } 26 } 27 28 //在AppleCompany类,有个四个方法。 29 public class AppleCompany 30 { 31 public static void MakeIphone(int num) 32 { 33 Console.WriteLine(num + "台Iphone 已生产出来"); 34 } 35 36 public void MakeIpad(int num) 37 { 38 Console.WriteLine(num + "台Ipad 已生产出来"); 39 } 40 41 public void MakeImac(int num) 42 { 43 Console.WriteLine(num + "台Imac 已生产出来"); 44 } 45 46 public void MakeIpod(int num) 47 { 48 Console.WriteLine(num + "台Ipod 已生产出来"); 49 Console.Read(); 50 } 51 }
结果:
三、绑定多个方法
1 static void Main(string[] args) 2 { 3 DigitalFactory df = new DigitalFactory(); 4 //委托绑定多个方法。 5 Dele deles = new Dele(AppleCompany.MakeIphone); 6 deles += new AppleCompany().MakeIpad; 7 deles += new AppleCompany().MakeImac; 8 deles += new AppleCompany().MakeIpod; 9 df.MakeDigitals(deles,200); 10 }
结果: