Hone C# III

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

posted on 2009-04-01 09:01  超子  阅读(184)  评论(0编辑  收藏  举报

导航