[测速]C#中的超级方法

时间:2015-02-18  来源:搜索技术  阅读:

很久前就开始关注Linq( Language Integrated Query)技术了, 文章读了不少,都是纸上谈兵,从来没有用过一下,我现在一直都用vs.net2005做项目,在2005中有一个CTP版本的Linq,这个只能装在英文版上,我的是中文版的,想装也装不上。现在vs.net2008已经出beat2了,beat2推出说明年末或明年初正式版可能就会出来,正好这段时间比较空闲,就下载一个装上了。

Vs.net2008中提供了很多令开发人员激动不已的新功能,这其中最突出的亮点之一就是所谓的集成语言查询Linq。Linq在此前的一些版本中不同功能是由不同团队开发的,所以有很多称呼,比如Linq to Object,Linq to XML,Linq to SQL等,我们统称为Linq好了,它们分别提供对象的集成查询,xml集成查询,数据库与对象OR/M及其集成查询,以前在项目中OR/M大都采用从Java移植过来的NHibernate,虽然这也是一个非常优秀并广泛使用的OR/M框架,但使用和配置都没有Linq to SQL简便,语言集成化程度就更没有可比性了。在Linq中为所有对象(一般对象,实体数据对象,XML数据对象等)提供了统一的集成查询技术,在对象查询中所积累的经验和技巧,完全可用于数据库的查询,这就意味着对于一般C#程序员来说,甚至不需要专门学习数据库或XML方面的知识,这个功能就太牛比了。

Linq何以有此超强的能力?关键在于.NET3.0以后所提供的“扩展方法”,为其打开了任督二脉。扩展方法(Extension Methods),就是往一个类里面增加新方法,不需要编写子类,也不会破坏类的封装,也不需要重编译这个类。按理说这似乎没什么特别之处,不会这么神奇吧,下面看一个简便的例子。

为了判断一个对象是否存在于一个集合中,编写了如下扩展方法如下:

namespace MyExtensionMethods{

  public class MyMethods{

    public static bool IsIn(this object o,IEnumerable arr){

         foreach(object e in arr){

             if(e.Equals(o)){

             return true;

            }

        }

        return false;

    }

}

}

注意上面声明这个扩展方法时用的是this object o,这表示这个方法可以加入到System.Object这个类,这个加入的工作是由编译器去完成的,要使用这个扩展方法只需要引入所在的名称空间就行了。就好象甲A外援,打完球走人,不用担心从根本上改写了System.Object.

现在开始使用:

using MyExtensionMethods; //引入包含此扩展方法的名称空间

public class Test{

  public static void Test1(){     //用于字符串数组

[测速]C#中的超级方法

http://m.bbyears.com/seo/13051.html

推荐访问:藏宝阁 菜鸟教程 创客贴 草料二维码 cctv5 cctv csdn cnki
相关阅读 猜你喜欢
本类排行 本类最新