回调就是这样一种由服务端向客户端提供异步反馈的机制,它可能会涉及多线程(multithreading),也有可能只是给同步更新提供入口。C#语言用委托来表示回调。
通过委托,可以定义类型安全的回调。最常用到委托的地方是事件处理,然而除此之外,还有很多地方也可以用。如果想采用比接口更为松散的方式在类之间沟通,那么就应该考虑委托。这种机制可以在运行的时候配置回调目标,并且能够通知给多个客户端。委托是一种对象,其中含有指向方法的引用,这个方法既可以是静态方法,又可以是实例方法。开发者可以在程序运行的时候配置一个或多个客户对象,并与之通信。
由于经常需要使用回调与委托,因此,C#语言提供了一种简便的写法,可以直接用lambda表达式来表示委托。此外,.NET Framework库也用Predicate<T>、Action<>及Func<>定义了很多常见的委托形式。predicate(谓词)是用来判断某条件是否成立的布尔(Boolean)函数,而Func<>则会根据一系列的参数求出某个结果。其实Func<T,bool>与Predicate<T>是同一个意思,只不过编译器会把两者分开对待而已,
结论:
Func<T, bool>是对delegate bool Predicate<T>(T obj)的简化,
Predicate<T>又是对Func<T, bool>的简化,
其实,就是一个东西。
List<T>中的方法应该统一参数。
提示也可以看出.
也就是说,即便两个委托是用同一套参数及返回类型来定义的,也依然要按照两个来算,编译器不允许在它们之间相互转换。Action<>接受任意数量的参数,其返回值的类型是void。
LINQ就是用这些机制构建起来的。List<T>类也有很多方法用到了回调。比方说下面这段代码:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有