买了一本书 LINQ从基础到项目实践。记录只为督促自己学习过程
【摘要】C#2.0 语言在很多方面扩充了原有的C#1.0的语言,提出了泛型,匿名方法的概念,使用泛型可以定义带有一个或者多个类型参数的方法或类。泛型是LINQ技术实现的基石。
我们以取两数取小的函数为列;
int Min (int a,int b) { if(a<b) return a; else return b; }
这个方法使用强类型的方法定义参数a,b。如果是浮点型的就需要重新定义一个方法了。我们想在.NET机制中所有的数据类型的基类是object。
object Min(object a,object b) { if(a<b) return a; else return b; }
不幸的是,这段代码当接受两个int 或者float类型参数时,并不能正常工作,原因是比较操作符“<”并不是dinginess在object类型上面的操作符,需要借助于一个IComparable接口来实现比较运算,于是就要修改
IComparable Min(IComparablet a,IComparable b) { if(a.CompareTo(b)<0) return a; else return b; }
至此上述问题算是解决了,但是带来新的问题,每次使用这段代码,都必须进行类型之间的相互转换,如下面的方法调用代码需要将方法的返回值转换成整数类型。
int a=3,b=5;
int c=(int) Min(a,b);
频繁的类型转换会消耗计算机的资源,造成程序的执行效率下降。为了根本上解决这个问题,C#2.0提出了泛型的概念,使用泛型可以将类型转换工作推迟到程序自行时由JITTER(JITTER 是.Net的一部分,它负责将IL代码转换成机器代码,C#编译器将源编译成IL代码执行),经过JITTER编译过的机器代码将不在含有类型转换的内容。
static T Min<T>(T a, T b) where T : IComparable<T> { if (a.CompareTo(b) < 0) return a; else return b; }