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上,甚至会写入某个文本框)。那么我可以设计这样一个方法:
拥有了前文中的这些特性,为c#提供一个Linq框架的大环境已经成熟了,为了使Linq变得elegant ,c#还提供了var,Object Initializers, and Collection Initializers等,而Linq框架也提供了专有名词到扩展方法的mechanical translation。这一切使得一个LINQ看起来就像下面的样子。
--------------------------------------
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