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
CLR via C# 委托链
最新推荐文章于 2011-11-07 11:13:20 发布