.NET 委托,事件和 Lambda 表达式
委托
委托是什么?
委托是一种引用类型(其实就是一个类,继承MulticastDelegate特殊的类。),表示对具有特定参数列表和返回类型的方法的引用。
每个委托提供Invoke方法, BeginInvoke和EndInvoke异步方法
为什么需要委托?
委托可以将方法(即逻辑)作为参数;逻辑解耦,保持稳定。代码复用,保证项目规范。
如何使用委托?
如何声明、实例化和使用委托
声明委托
实例化委托
调用委托
其他使用委托
简化开发过程,.NET 包含一组委托类型:
Action<> 具有参数且不返回值。
Func<> 具有参数且返回由参数指定的类型的值。
Predicate<> 用于确定参数是否满足委托条件的情况。
实际案例
代码:
Lambda表达式
Lambda是什么?
Lambda就是使用委托的更方便的语法。
为什么需要Lambda?
简化开发过程,并不会影响运行性能。
如何使用Lambda?
表达式lambda基本形式:
使用空括号指定零个输入参数:
括号内的两个或更多输入参数使用逗号加以分隔:
语句lambda
语句 lambda 的主体可以包含任意数量的语句;
使用匿名委托和lambda代码:
事件
事件是什么?
事件是一种特殊的委托类型,主要用于消息或通知的传递。事件只能从事件的发布类型中调用,并且通常基于EventHandler委托,该委托具有代表事件发送者的对象和System.EventArgs派生的类,其中包含有关事件的数据。
何时使用委托和事件?
侦听事件是可选的:如果你的代码必须调用由订阅服务器提供的代码,则应使用基于委托的设计。如果你的代码在不调用任何订阅服务器的情况下可完成其所有工作,则应使用基于事件的设计。
返回值需要委托:用于事件的委托均具有无效的返回类型,事件处理程序通过修改事件参数对象的属性将信息传回到事件源。
事件具有专用调用:包含事件的类以外的类只能添加和删除事件侦听器;只有包含事件的类才能调用事件。
如何使用事件?
发布事件
定义事件数据
声明发布类中的事件
订阅事件
定义一个事件处理程序方法
使用(+=) 添加订阅事件
使用(-=) 取消订阅事件
示例
参考
委托 https://docs.microsoft.com/zh-cn/dotnet/csharp/delegates-overview
Lambda表达式 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/lambda-expressions
事件 https://docs.microsoft.com/zh-cn/dotnet/csharp/events-overview
版权声明: 本文为 InfoQ 作者【AI代笔】的原创文章。
原文链接:【http://xie.infoq.cn/article/1e5ce5d68f8af979ffbf78a74】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论