使用Closures改善API的设计与使用

2008 年 9 月 16 日

某些执行复杂解析的 API 通常会通过事件暴露中间结果。例如,XDocument.Validate 扩展方法使用了一个事件来通知程序存在的验证错误。

在传统的.NET 编程中,捕获这些事件就意味着需要为每个事件创建一个单独的函数。由于没有直接的途径传递事件处理器的额外信息,通常这些函数会在抛出事件的类中来实现。

Eric White 使用 Closures 演示了一种更好的方式。Closures 在 lambda 或匿名内联函数中,属于一种特殊情形。其特殊之处在于能够引用一种变量,这种变量并非直接赋值,而是赋给包含了 lambda 的函数。这就使得 Eric 可以将事件处理器的逻辑赋值给函数。如下的代码行演示了创建Closure,并将其传递给Validate 函数的方法:

snippet.Validate(schemas, (o, e) => errors += e.Message + Environment.NewLine);正如在批注中所示,C#和 VB 中的 Closure 均被实现为匿名类,它包含了必要的成员变量。“被装入”的变量被移到新类中,既可通过原有函数,也可以通过包含它的任意匿名函数所引用。

查看英文原文: Using Closures to Improve API Design and Usage Faisal Waris 的精彩评论: 如果使用 Closures,则程序的某些部分会变得更为简洁。正如在一些旧有语言中开一时风气之先的语言那样(LISP、Smalltalk 等),大多数新的主流语言都支持 Closures(VB、C#、Ruby、Python、javascript)。Java 是一个值得注意的例外 [译注:在 Java 7 中引入了对 Closures 的支持]。然而并非所有人(特别是 C#/VB 社区)都对此有所了解,或者欣然接受,因而对其给与更多的关注总是一件好事。值得注意的是,异步编程从 Closures 中获益良多——最显而易见的证据就是 AJAX 对其的广泛使用。Closures 在 DLR 中的支持,对 Silverlight 编程无疑起到了推波助澜的作用,因为所有的服务端调用都是在调用体之外进行异步处理的。

2008 年 9 月 16 日 22:19424
用户头像

发布了 109 篇内容, 共 35.3 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

【架构师训练营第1期 02 周】 作业

Bear在挨踢

极客大学架构师训练营

架构师训练营作业一:食堂就餐卡系统设计

zjzj2017

UML

架构师训练营第二周作业

四夕晖

依赖倒置原则

LeetCode题解:589. N叉树的前序遍历,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

学习笔记:架构师训练营-第二周

四夕晖

面向对象 面向对象思想 面向对象编程

「架构师训练营」第二周课后练习

L

请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

orchid9

【API进阶之路】太秃然了,老板要我一周内检测并导入一万个小时的视频

华为云开发者社区

视频 API

第二周-架构设计

Galaxy数据平台

架构师1期-框架设计学习总结

ltl3884

极客大学架构师训练营

架构师训练营第二周作业

Shunyi

极客大学架构师训练营

架构师训练营第二周心得

CmHuang

第二周总结

orchid9

面向对象设计原则

leo

极客大学架构师训练营

架构师训练营—第二周作业

Geek_shu1988

架構師訓練營 week2 總結

ilake

依赖倒置原则(DIP)

leo

极客大学架构师训练营

一个草根的日常杂碎(9月26日)

刘新吾

社会百态 生活随想 时评杂谈

电商小游戏火爆,开发者如何快速接入?看这里

白开水

egret 淘宝电商 淘宝小程序 淘宝小游戏 电商小游戏

第二周作业

熊桂平

极客大学架构师训练营

Bilibili资深运维工程师:DCDN在游戏应用加速中的实践

巨侠说

运维 CDN

架构师1期-框架设计作业

ltl3884

极客大学架构师训练营

Week 2 作业01

Croesus

Week 2 总结

黄立

请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。

orchid9

2020中国科技峰会系列活动青年科学家沙龙——AI学术生态与产业创新圆满召开

极客播报

人工智能 2020 中国科技峰会 青年科学家沙龙 中国科协

「架构师训练营」第二周课后练习

L

华为侯金龙:打造行业智能体,共建全场景智慧

华为云开发者社区

华为云 经济 智能

苹果A14 Bionic人工智能算力翻倍,AIOps产品落地加速引领AI生态建设逐步完善

BonreeAPM

人工智能 运维 APM 运维自动化 AIOPS

第二周架构师训练营作业

我是谁

极客大学架构师训练营

硬核系列 | 深入剖析Java协程

高翔龙

Java 字节码插桩 协程 Coroutine

使用Closures改善API的设计与使用-InfoQ