委托既可以封裝一個方法,又可以對同一類型的方法進行封裝,它就是多播委托 運行結果: ...
委托既可以封裝一個方法,又可以對同一類型的方法進行封裝,它就是多播委托
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 try 70 { 71 returnstring.Append(t() + Environment.NewLine); 72 } 73 catch (Exception e) 74 { 75 76 } 77 } 78 //把結果返回給調用者 79 return returnstring.ToString(); 80 } 81 82 } 83 }
運行結果: