06.泛型+枚举器

1.通用集合的一些缺陷:
    a)性能问题。
    b)类型是不安全的。
    c)清晰度不够。
2.使用泛型的好处:
    a)类型安全的。
    b)增加了清晰性。
    c)对于泛型集合提升了性能,取消的装箱拆箱操作。
    d)抽象性更好。
3.泛型类型:
    a)类型形参:一个占位符,多个形参用“,”隔开(<T,R>)。
    b)类型实参:实现实例时具体的参数类型(<int,string>)。
4.构造类型:
    a)开放式类型:不受具体类型约束(不限制类型,或者是where条件)。
    b)封闭式类型:指定具体类型。
5.泛型约束:
    a)继承约束:指定一个类型,并且只能实现此类型的子类型。
    b)接口约束:规定类型实参必须实现接口。
    c)引用类型约束。
    d)值类型约束。
    e)构造函数约束
6.可枚举的类型(foreach)必须实现IEnumerator和IEnumerable接口。
7.IEnumerator的一些缺陷:
    a)值类型的装箱和拆箱操作,降低了性能。
    b)需要进行Object类型转换,类型是不安全的。
8.yield迭代器:
    a)yield return expression
    b)yield break;

  泛型的优势表现为:类型的安全、代码的重用、性能的提升、代码的清晰度。

      1.类型安全:当SortedList添加了一个字符类型时,存在一个字符向对象的隐式转换。同样,如果检索一个字符类型对象时,存在一个自 Object向字符类型的显示转换。这种运行时类型安全的缺乏对开发者及易于出错。相反,使用了GenericSortedList< String>之后所有的添加及查找方法通过字符参数来运行。由此允许程序在编译时而不是运行时对变量类型进行确定及检查。


      2.代码复用:开发者为了扩展可能会选择自SortedList派生一个SortedListOfStrings。而通过 GenericSortedList< T>,所要做的就是实例化预期元素类型T。作为一个附加值,泛型代码产生于运行时,由此两种基于未涉及的类型(例如 GenericSortedList< String>和GenericSortedList< FileStream>)能够复用大部分的JIT编译代码。即使扩展是不同的集合,这也可以实现。


      3.性能提升:这是软件的基本。如果在JIT编译时而不是在执行过程中进行类型检查,性能会得到提高。在托管代码中,参数及值的实例化需要不断进行装盒及拆盒。避免这样的实例化对性能会有显著影响。一个拥有一百万个整型数的数组排序泛型方法比非泛型方法快三倍。这是因为完全略掉值的装盒步骤。同样对字符参数的数组排序通过泛型方法因不必在运行时进行类型检查,性能会会提高20%。


      4.代码清晰度:C#泛型的清晰有多种形式。首先是限制,限制可以影响泛型代码的扩张;在 GenericSortedList< T>例子中,集类的作用范围限定在T能够实现的类型及进行排序。当然泛型方法也可以通过类型接口而不必使用特定语法来使用。由此,在编译时的类型安全增加了程序代码的清晰。


代码:下载

posted @ 2011-02-20 21:12  13路易的  阅读(792)  评论(0编辑  收藏  举报