C#之委托
来源:互联网 发布:mac宽带连接说鉴定失败 编辑:程序博客网 时间:2024/06/07 10:44
委托
委托是C#版的寻址方法。相对于C++的函数指针,委托不仅是类型安全的(它定义了返回类型和参数类型),而且包含的是一类具有相同参数类型以及返回类型方法的引用。
委托基础
1.声明委托
声明的委托语法如下:
delegate void IntMethodInvoker(int x);
在示例中,定义了一个委托 IntMethodInvoker,并指定引用的方法应该带有一个 int 参数,并返回 void 。
2.实例化委托
当声明一个委托时,就可以把它当做一个数据类型,用这个数据类型来定义一个变量时,即是实例化委托。
//定义委托private delegate string GetAString();...int x=40;实例化委托GetAString stringMethod = new GetAString(x.ToString);//GetAString stringMethod = x.ToString;...
值得注意的是,输入方法名ToString
时,并不带括号的。
3.调用委托
委托的调用形式有两种:
//第一种stringMethod();//第二种stringMethod.Invoke();
两种形式的调用结果都一样,C#编译器会把第一种转换为第二种。
委托高级用法
1.Action<T>
和Func<T>
委托
Action<T>
和Func<T>
是C#自带的两种泛型委托,Action<T>
表示引用一个void返回类型的方法,可以传递最多16种参数类型;而后者允许调用带返回类型的方法。与Action<T>
一样,它也最多可以传递16种参数类型,并且可以接受无参数带返回类型的方法。
2.多播委托
前面所讲的都是一个委托包含一个方法。然而,委托可以包含多个方法,它会按顺序的执行多个方法,所以,多播委托只能得到最后一个方法的结果。
...//形式一Action<double> Method = FirstMethod;Method += SecondMethod;//形式二Action<double> Method1 = FirstMethod;Action<double> Method2 = SecondMethod;Action<double> Method = Method1 + Method2;...
在上面的示例中,假如调用第一个方法抛出了异常,多播委托就会停止迭代,不再调用第二个方法。
为了避免这个情况,Delegate类定义GetInvocationList()方法,它返回一个Delegate对象数组。这时,再对数组进行迭代,就会捕捉到异常并且继续运行。
3.匿名方法
匿名委托与前面的所有委托并无差别,假如该委托只用一次,那就可以采用匿名方法实现,这样子可以减少代码量,也方便查看代码。
除了以上这些,委托还运用到了其他地方,如Lambda表达式以及事件。在接下来的文章中再进行讲解吧。
- C#小结之委托
- C#之委托
- C#之委托
- C# 之 委托
- C# 篇之---委托
- C#委托之愚见
- C#之初始委托
- C#之委托学习
- C#之委托
- C#学习之委托
- C#5.0之委托
- C#之委托
- c#之事件委托
- C#之委托
- C#之委托
- C#学习之委托
- C#之委托
- C#学习之----委托
- 正则表达式
- 读深入理解Java虚拟机
- 使用FileProvider共享文件
- 原生js实现ajax的用户简单登入
- 为你的网站配置一个小巧的框架( CodeIgniter)
- C#之委托
- retrofit请求直接返回string
- 9月24日
- 系统中同时有 python2和 python3,怎么让 ipython 选择不同的版本启动?
- select自定义下拉箭头
- iOS中常见的传感器
- Android studio 的快捷键 MAC 和Win版本
- python迭代器与生成器与上下文管理器
- 第4周项目2