CLR via C# 委托链
来源:互联网 发布:js写酷炫的界面 编辑:程序博客网 时间:2024/05/21 07:28
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 委托深入研究{ class Program { public delegate string GetName(); internal sealed class A { public string name() { return "我是孙悟空!"; } } internal sealed class B { public string name() { return "我是唐三藏!"; } } internal sealed class C { public string name() { return "我是猪八戒!"; } } internal sealed class D { public string name() { throw new Exception("ERROR:查无此人"); //return "我是沙和尚!"; } } static void Main(string[] args) { GetName getname = null; getname += (GetName)(new A().name); getname += (GetName)(new B().name);//将委托的方法添加到委托链上 getname += (GetName)(new D().name); getname += (GetName)(new C().name); Console.WriteLine(GetNameString(getname)); Console.ReadLine(); } public static string GetNameString(GetName getname) { StringBuilder report = new StringBuilder(); Delegate[] arrayOfDelegate = getname.GetInvocationList(); //获取委托链的每个方法 foreach (GetName d in arrayOfDelegate) { try { report.AppendFormat("{0}{1}", d(), Environment.NewLine); } catch (Exception e) { report.AppendFormat("{0}{1}", e.Message, Environment.NewLine); } } return report.ToString(); } }}//http://www.cnblogs.com/kirinboy/archive/2009/08/28/intensive-delegate-2.html