您的位置:首页 > 编程语言 > C#

.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐