委托既可以封装一个方法,又可以对同一类型的方法进行封装,它就是多播委托
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace DelegateTest 7 { 8 class Program 9 {10 //申明一个委托类型,它的实例引用一个方法11 //该方法传递0参数,返回void类型12 public delegate string DelegateTestOne();13 14 static void Main(string[] args)15 {16 //用静态方法来实例化委托17 DelegateTestOne teststatic = new DelegateTestOne(Program.method1);18 19 //用实例方法来实例化委托20 DelegateTestOne test2 = new DelegateTestOne(new Program().method2);21 22 //用实例方法来实例化委托23 DelegateTestOne test3 = new DelegateTestOne(new Program().method3);24 25 //定义空一个委托对象26 DelegateTestOne deleteAll = null;27 deleteAll += teststatic;28 deleteAll += test2;29 deleteAll += test3;30 Console.WriteLine(Test(deleteAll));31 32 Console.ReadLine();33 }34 35 36 public static string method1()37 {38 39 //Console.WriteLine("这是一个静态方法");40 return "这是一个静态方法";41 }42 43 public string method2()44 {45 //Console.WriteLine("这是实例方法2");46 return "这是实例方法2";47 }48 49 public string method3()50 {51 // Console.WriteLine("这是实例方法3");52 return "这是实例方法3";53 }54 55 56 //测试多播委托57 public static string Test(DelegateTestOne testone)58 {59 if (testone == null)60 {61 return null;62 }63 StringBuilder returnstring = new StringBuilder();64 65 Delegate[] delegatearray = testone.GetInvocationList();66 67 foreach (DelegateTestOne t in delegatearray)68 {69 try70 {71 returnstring.Append(t() + Environment.NewLine);72 }73 catch (Exception e)74 {75 76 }77 }78 //把结果返回给调用者79 return returnstring.ToString();80 }81 82 }83 }
运行结果: