基本类型--委托(二)
15.6 C#对委托的支持

15.7对委托链调用进行更多控制


internal sealed class Light
{

public String SwitchPosition()
{
return "灯关了";
}
}

internal sealed class Fan
{

public String Speed()
{
throw new InvalidOperationException("风机因过热而报废");
}
}

internal sealed class Speaker
{

public String Volume()
{
return "声音很大";
}
}
public sealed class Program

{
//查询以上各个组件状态
private delegate String GetStatus();
public static void Main()

{
GetStatus getstatus = null;
getstatus += new GetStatus(new Light().SwitchPosition);
getstatus += new GetStatus(new Fan().Speed);
getstatus += new GetStatus(new Speaker().Volume);
Console.WriteLine(GetStatusReport(getstatus));
Console.ReadLine();
}
private static String GetStatusReport(GetStatus status)

{
if (status == null) return null;
StringBuilder sb = new StringBuilder();
Delegate[] arrayOfDelegate = status.GetInvocationList();
foreach (GetStatus s in arrayOfDelegate)

{
try

{
sb.AppendFormat("{0}{1}{1}", s(), Environment.NewLine);
}
catch (InvalidOperationException e)

{
Object component = s.Target;
sb.AppendFormat("Failed to get status from{1}{2}{0}Error:{3}{0}{0}",
Environment.NewLine,
((component == null) ? "" : component.GetType() + "."),
s.Method.Name,
e.Message);
}
}
return sb.ToString();
}
}
15.8C#为委托提供的语法便利
15.7对委托链调用进行更多控制
转载于:https://www.cnblogs.com/tenghoo/archive/2008/05/27/1208443.html