第二部分 设计类型:第12章 泛型

泛型的好处1.代码重用。2.算法重用。

泛型参数要么称为T,要不以T开头(如TKey和TValue)。大写T代表类型Type。

代码演示:

private static void SomeMethod(){
   //构造一个List来操作DateTime对象
   List<DateTime> dtList = new List<DateTime>();
   
   //向内部添加DateTime对象
   dtList.Add(Datetime.Now); //不进行装箱
   
   //向列表添加另一个DateTime对象
   dtList.Add(DateTime.MinValue); //不进行装箱
   
   //尝试向列表中添加一个String对象
   dtList.Add("1/1/2004");  //编译时出错
   
   //从列表提取一个DateTime对象
   DateTime dt = dtList[0]; //不需要转型
}

以上代码表明了泛型的优势
1.源代码保护。
2.类型安全。
3.更清晰的代码。
4.更佳的性能。

将泛型List算法应用于Int32类型,速度比非泛型ArrayList算法快的多,差别30倍左右。
因为ArrayList操作值类型(Int32)会造成大量装箱操作。
使用引用类型测试速度差不多,但泛型还是更有优势:代码清晰、编译时类型安全。

 

12.1 Framework类库中的泛型
泛型最广泛的应用就是集合类。FCL定义了几个泛型集合类。大多数在System.Collections.Generic和System.Collections.ObjectModel命名空间中。
在开发中推荐使用泛型集合。

新的泛型接口并不是设计来完全取代旧的泛型接口。许多时候为了保证向后兼容。我们不得不同时使用两者。例如,如果List<T>类只实现了IList<T>接口,就没有代码能将一个List<DateTime>对象看成是一个IList了。

System.Array类(所有数组类型的基类)提供了大量泛型方法。如,ForEach,Sort,Find,FindIndex等。

下面展示了部分方法:

public abstract class Array: ICloneable,IList,ICollection,IEnumerable,IStrucurealComparable,IStruscturalEqueatable{
  public static void Sort<T>(T[] array);
  pblic static void Sort<T>(T[] array,Icomparer<T> comparer);
 
  public static Int32 BinarySearch<T>(T[] array,T value);
  public static Int32 BinarySearch<T>(T[] array,T value),IComparer<T> comparer);
  ...
}

以下代码展示了如何使用其中一些方法:

public static void Main(){
  //创建并初始化一个字节数组
  Byte[] byteArray = new Byte[]{5,1,4,2,3};
 
  //调用Byte[]排序算法
  Array.Sort<Byte>(byteArray);
 
  //调用Byte[]二叉搜索算法
  Int32 i = Array.BinarySearch<Byte>(byteArray,1);
  Console.WriteLine(i); //显示"0"
}

 

 

12.2  Wintellect的Power Collections库
Power Collections这个库由一系列集合类构成。这些集合类本身是泛型,同时全面利用了泛型。
(详细请访问Wintellect.com)。

表12-1总结了Power Collections库包含的部分集合类:

 

12.3 泛型基础结构

 

12.3.1 开放类型和封闭类型
贯穿全书,讨论了CLR如何为应用程序使用的每个类型创建一个内部数据结构。这种数据结构称为类型对象(type object)。

具有泛型类型参数的类型称为开发类型(open type),CLR    禁止构造开放类型的任何实例。这点类似于CLR禁止构造接口类型的实例。

为所有类型实参传递的都是实际数据类型,类型就称为封闭类型(closed type)。CLR允许构造封闭类型的实例。

CLR会在类型对象内部分配类型的静态字段。因此,每个封闭类型都有自己的静态字段。

 

posted @ 2014-06-10 15:08  IT浪潮之巅  阅读(154)  评论(0编辑  收藏  举报
   友情链接: 淘宝优惠券