.NET C# 声明、实例化和使用委托以及委托在 C# 中的发展
2011-11-28 15:22
316 查看
本文内容
委托和泛型委托 委托发展:C# 中委托的发展 泛型委托委托 声明(定义)委托 实例化委托 调用委托 用 Lambda表达式创建和实例化委托
.NET 提供的委托 Action 委托 Func 委托 Predicate 委托
参考资料 修改记录
下载 Deom
下载更多 Demo
委托和泛型委托
委托实现了函数指针,这个函数指针跟 C 的函数指针不同,它是类型安全的,确保被调用的方法签名是正确的。只要方法签名跟委托签名匹配,给委托的实例可以是实例方法,或是静态方法。为什么要有这个东西?我们对把数据作为函数参数很熟悉,但有时,某个方法的操作不是针对数据,而是针对另一个方法。比如,线程,用线程去执行一个方法,或是代码段;再比如,事件,事件是委托的特例,等等。
委托发展:C# 中委托的发展
C# 1.0 中,通过用在其他地方定义的方法显式初始化委托来创建委托的实例。 C# 2.0 引入了匿名方法(anonymous method)的概念,用匿名方法初始化委托,在委托中执行未命名的内联语句块。 C# 3.0 引入了 Lambda 表达式,与匿名方法的概念类似,但更具表现力并且更简练。匿名方法和 Lambda 表达式统称为“匿名函数”,类似闭包(Closure)特性。 通常,针对 .NET Framework 3.5 及更高版本应使用 Lambda 表达式。下面的示例演示了从 C# 1.0 到 C# 3.0 委托创建过程的发展:
示例1:
View Code
Point[] points = { new Point(){X = 100,Y = 200}, new Point(){X = 150,Y = 250}, new Point(){X = 250,Y = 375}, new Point(){X = 275,Y = 395}, new Point(){X = 295,Y = 450}, new Point(){X = 290,Y = 451} }; Point first = Array.Find(points, (p) => { if (p.X * p.Y > 100000) return true; else return false; }); Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y); System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey();
说明:无需显示创建委托,或是指定泛型方法的参数类型,因为编译器会根据上下文自己确定。
参考资料
MSDN 声明、实例化和使用委托 MSDN 提供的委托 事件(C# 编程指南)委托(C# 编程指南)
C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers-Delegates, Events, and Lambda Expressions
C# 3.0: Master the fundamentals of C# 3.0-Delegates and Events
程序设计_猫老鼠主人
修改记录
2015年1月29日 【UPDATE】下载 Deom
下载更多 Demo
相关文章推荐
- 如何:声明、实例化和使用委托(C# 编程指南)
- 如何:声明、实例化和使用委托(C# 编程指南)
- 如何:声明、实例化和使用委托(C# 编程指南)GOOD
- 编写高质量代码改善C#程序的157个建议——建议36:使用FCL中的委托声明
- 通过代码学习C#&.NET——委托使用(正则表达式替换)
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- 通过代码学习C#&.NET——委托使用(通用类设计)
- c#中事件Event声明和触发,以及自定义事件委托和系统委托EventHandler
- 通过代码学习C#&.NET——委托使用(线程、任务)
- [Unity&C#&委托事件&未实例化]使用委托事件的时候事件对象未实例化
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- C#.net制作验证码(英文与数字组成的4位随机数),以及MD5值的使用
- 委托的声明与实例化使用
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net
- MSSQL根据表名动态分页的存储过程以及C#.net调用使用
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- 通过代码学习C#&.NET——委托使用(通用类设计)
- C#读取excel以及asp.net消息头的使用