惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
雷峰网
雷峰网
J
Java Code Geeks
G
Google Developers Blog
博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
L
LangChain Blog
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
Vercel News
Vercel News
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
H
Hackread – Cybersecurity News, Data Breaches, AI and More
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
Y
Y Combinator Blog
博客园_首页
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
A
About on SuperTechFans
B
Blog
Microsoft Security Blog
Microsoft Security Blog

博客园 - 超子

My Development PC - II My Development PC - I 为Migrator.net制作一个可自动生成版本号的项目模板 La Maison en Petits Cubes Hone C# II Hone C# 卡壳 游戏开发学习 02 游戏开发学习 01 游戏开发学习 00 C#次大数的函数 语言学习开篇 - 写在前面 送同志们留念:动态指示条(Activity indicators) 送同志们留念:看看我们的MSDN China 都为我们作了些什么 热点杂记:Atlas Control Toolkits 更新 热点杂记:Asp.net 的演示视频 VS2005 中的 Template 热点杂记:Scott Guthrie 中文博客开通 送同志们留念:各种符号的英文名称
Hone C# III
超子 · 2009-04-01 · via 博客园 - 超子

Extension Methods (扩展方法)
--------------------------------------
Scott 这么说:扩展方法允许开发人员往一个现有的CLR类型的公开契约(contract)中添加新的方法,而不用生成子类或者重新编译原来的类型。扩展方法有助于把今天动态语言中流行的对duck typing的支持之灵活性,与强类型语言之性能和编译时验证融合起来。
 
扩展方法促成了好多有用的使用场景,并使在作为Orcas一部分发布的.NET版本中引进的非常强大的LINQ查询框架成为可能。
http://blog.joycode.com/scottgu/archive/2007/04/07/100611.aspx

泛型(Generic),方法代表(Func<TResult>...,Action<>...) 可以让我们们轻松的抽像方法,而通过Lambda Expressions(Expression Lambda Expressions & Statement Lambda Expressions)又让我们可以在调用这些抽象方法时为其编写具体逻辑。加上Extension Methods 我们就可以把这些方法和对象随需要结合起来。

场景举例:我需要为string提供一个PreEditAndPrint抽象行为,对字符串进行处理然后显示出来(在console app 里显示到控制台,在web app 里显示到page上,甚至会写入某个文本框)。那么我可以设计这样一个方法:

Code

Extension Methods 必须声明在静态类中(static class)并且需要在应用域应用该静态类。调用就很简单了

Code

拥有了前文中的这些特性,为c#提供一个Linq框架的大环境已经成熟了,为了使Linq变得elegant ,c#还提供了var,Object Initializers, and Collection Initializers等,而Linq框架也提供了专有名词到扩展方法的mechanical translation。这一切使得一个LINQ看起来就像下面的样子。

Code