代码如下:
复制代码 代码示例:
namespace 多播委托
{
/*
* 多播委托的实例
* 注意:
* ① 委托可以包含多个方法,成为多播委托
* ② 因为要返回多个方法,所以委托的签名就必须返回void
* ③ 多播委托的方法链的的顺序未经严格定义,所以避免使用任何依赖调用顺序的委托
* ④ 经过定义的多播委托逐个调用委托的方法,如果有任何一个出现错误,
* 可以根据需要手动迭代下一个委托方法
*/
//DisplayMethod类有三个静态方法
class DisplayMethod
{
//返回类型要定义为void
public static void one()
{
Console.WriteLine("one");
}
public static void two()
{
Console.WriteLine("two");
throw new Exception();
}
public static void three()
{
Console.WriteLine("three");
}
}
//定义委托
public delegate void MyDelegate();
class Program
{
static void Main(string[] args)
{
//为委托添加方法,委托可以识别+, +=, -, -=运算符
//可以按下面的方式为委托添加方法
MyDelegate myOne = DisplayMethod.one;
MyDelegate myTwo = DisplayMethod.two;
MyDelegate myDelegate = myOne + myTwo;
myDelegate += DisplayMethod.three;
/* 可以用下面方法调用被委托的三个方法
* myDelegate();
* 也可以通过调用委托的GetInvocationList()方法来返回一个委托方法的数组,
* 以迭代调用委托中的方法
*/
foreach(MyDelegate my in myDelegate.GetInvocationList())
{
try
{
my();
}
catch
{
Console.WriteLine("throw error ");
//如果有错误从委托列表中删除错误的方法
myDelegate -= my;
}
}
Console.WriteLine("删除方法two后。。。 。。。");
//删除后的列表调用,只剩下one和three www.jb200.com
foreach (MyDelegate my in myDelegate.GetInvocationList())
{
my();
}
Console.Read();
}
}
}
有兴趣的朋友,可以动手测试下这段代码,看看效果如何?
脚本学堂,祝大家学习进步。