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

原创粉丝点击