C# 委托链(多播委托)
程序员文章站
2022-06-18 10:01:59
委托既可以封装一个方法,又可以对同一类型的方法进行封装,它就是多播委托 运行结果: ......
委托既可以封装一个方法,又可以对同一类型的方法进行封装,它就是多播委托
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 }
运行结果: