标签:
public delegate void aHandler(string text); public class A1 { public void Print(string txt) { Console.WriteLine(txt + "我是1号"); } } public class A2 { public void Print(string txt) { Console.WriteLine(txt + "我是2号"); } } class B1 { public static void StaticPrint(string txt) { Console.WriteLine(txt + "我是3号"); } public static void Main() { string my = "委托链"; A1 a1 = new A1(); A2 a2 = new A2(); //创建委托实例 aHandler ah1 = new aHandler(a1.Print); aHandler ah2 = new aHandler(a2.Print); aHandler ah3 = new aHandler(StaticPrint); Console.WriteLine("委托实例ah1的打印结果:"); ah1(my); Console.WriteLine("委托实例ah2的打印结果:"); ah2(my); Console.WriteLine("委托实例ah1+ah2的打印结果:"); aHandler ah = ah1 + ah2; ah(my); Console.WriteLine("委托实例ah1+ah2+ah3的打印结果:"); ah += ah3; ah(my); Console.WriteLine("委托实例ah1+ah3的打印结果:"); ah -= ah2; ah(my); Console.WriteLine("委托实例ah3的打印结果:"); ah -= ah1; ah(my); Console.WriteLine("试图调用null委托会引发异常"); try { ah-=ah3; ah(my); } catch(NullReferenceException ex) //尝试取消引用空引用对象时引发的异常 { Console.WriteLine(ex.Message); } Console.WriteLine("试图从null中移出委托是无效操作"); try { ah -=ah3; } catch(NullReferenceException ex) { Console.WriteLine(ex.Message); } Console.Read(); } }
运行结果:
委托实例ah1的打印结果:
委托链我是1号
委托实例ah2的打印结果:
委托链我是2号
委托实例ah1+ah2的打印结果:
委托链我是1号
委托链我是2号
委托实例ah1+ah2+ah3的打印结果:
委托链我是1号
委托链我是2号
委托链我是3号
委托实例ah1+ah3的打印结果:
委托链我是1号
委托链我是3号
委托实例ah3的打印结果:
委托链我是3号
试图调用null委托会引发异常
未将对象引用设置到对象的实例。
试图从null中移出委托是无效操作
委托是对方法或方法列表的引用,可以说是一种引用类型。委托分为三步:声明、实例化、调用。
标签:
原文地址:http://www.cnblogs.com/miaoying/p/4833300.html