上一篇已经演示了使用委托实现一个多语言问候的程序,这一篇文章来总结一下在.net 1.x中委托的使用方法。
既然委托是一个类型(class),那么它就要经历像类一个先声明,然后new一个对象,最后调用的过程。
.net 1.x中的委托
在.net 1.x中委托的使用是这样的,如下代码:
1 namespace DelegateDemo 2 { 3 //声明委托 4 public delegate void MyDel(string arg1, string arg2); 5 6 class Program 7 { 8 static void Main(string[] args) 9 {10 //.net 1.x中的委托11 Class1 c1 = new Class1();12 13 //创建委托对象14 MyDel myDel1 = new MyDel(c1.InstanceMethod);//实例方法15 MyDel myDel2 = new MyDel(Class1.StaticMethod);//静态方法16 17 //调用委托18 myDel1("a", "b");//或者myDel1.Invoke("a", "b");19 myDel2("a", "b");//或者myDel2.Invoke("a", "b");20 21 Console.ReadKey();22 }23 }24 25 public class Class126 {27 public void InstanceMethod(string arg1, string arg2)28 {29 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));30 }31 32 public static void StaticMethod(string arg1, string arg2)33 {34 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));35 }36 }37 }
从上面代码可以总结:
1,委托既可以接受实例方法,也可以接受静态方法,只要方法的签名和返回值类型与委托匹配即可。
2,调用委托有两种方法,第1种本质上也是调用委托的Invoke方法。
赋值委托
上面是使用new DelegateType()的方式创建委托的,其实可以使用更简单的方式来创建委托的。上面的创建委托的代码可以简化为:
1 //创建委托对象2 MyDel myDel1 = c1.InstanceMethod;//实例方法3 MyDel myDel2 = Class1.StaticMethod;//静态方法
为委托增加和移除方法
上面的例子,创建委托时只初始化了一个方法,其实委托可以添加多个方法的,添加方法通过'+=',移除方法通过'-='来实现,如下代码:
1 //创建委托对象2 MyDel myDel = c1.InstanceMethod;3 myDel += c1.InstanceMethod2;4 myDel += Class1.StaticMethod;5 myDel += Class1.StaticMethod2;
1,由多个委托组成的就是链式委托(或称多播委托),System.MulticastDelegate类便是为链式委托而设计的。
2,+=本质上调用的是Delegate.Combine方法。
调用委托
调用委托跟调用方法一样简单,只需要传入委托要求的参数,这些参数将用于调用委托的方法列表中的每一个方法,并且是依次序调用,如下代码:
1 //调用委托2 myDel("aaa","bbb");
链式委托之所以能够依次调用,原因是System.MulticastDelegate内部维护了一个指向下一个委托的指针。
输出结果:

注意:
1,如果为委托添加了多个相同的方法,那么这些方法都会被重复调用。
2,如果委托有返值,并且委托的调用方法列表中包含多个方法,那么只会返回最后一个方法的返回值,其它的返回值都会被忽略。
最后用XMind来总结一下:

编辑推荐:
- .net 1.x中的委托实例详解02-21
- 介绍一个力软敏捷开发框架02-21
- 什么是委托?总结.net中重要的特性委托02-21
- 对wcf的理解--实现计算器功能02-21
- C# 多线程--线程池的详细介绍02-21
- .NET Core 和 .NET .Framework 相比哪个速度快?02-21
- C#中SQL参数传入空值出错误和如何解决办法02-21
- szq.orm.sql02-21
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- .net 1.x中的委托实例详解
.net 1.x中的委托实例详解
26-02-21 - 介绍一个力软敏捷开发框架
介绍一个力软敏捷开发框架
26-02-21 - 什么是委托?总结.net中重要的特性委托
什么是委托?总结.net中重要的特性委托
26-02-21 - 对wcf的理解--实现计算器功能
对wcf的理解--实现计算器功能
26-02-21 - C# 多线程--线程池的详细介绍
C# 多线程--线程池的详细介绍
26-02-21 - .NET Core 和 .NET .Framework 相比哪个速度快?
.NET Core 和 .NET .Framework 相比哪个速度快?
26-02-21 - jquery pqgrid分页控件乱码是什么情况?
jquery pqgrid分页控件乱码是什么情况?
26-02-21 - Win10应该改进的10个方面是否应把免费放首位
Win10应该改进的10个方面是否应把免费放首位
26-02-21 - Win10的没用的应用软件怎么办?不喜欢可以完全卸
Win10的没用的应用软件怎么办?不喜欢可以完全卸
26-02-21 - Win10系统邮件和日历同步错误0x80c8043e的解决办法
Win10系统邮件和日历同步错误0x80c8043e的解决办法
26-02-21
