所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。(类型的 多态) 是一种编程范式,它利用“参数化类型”讲类型抽象化,从而实现更为灵活的复用。 1,可重用行 2,类型安全(在编译期间发现问题,而不是在运行的时候) 3,效率更高(避免装箱,拆箱的操作) 类型参数的命名准则: 1 务必使用描述性名称命名泛型类型参数 2 考虑使用T作为具有单个字母类型参数的类型参数名 3 务必将“T”作为前缀 CLASS C{} CLASS D:C{} CLASS E:C{} CLASS F:C{} CLASS G:C{} //非法 因为非泛型类型继承了未被实例化得泛型类 c#除可单独声明泛型类型(包括类和结构)外,也可在基类中包含泛型类型得声明 。但基类如果是泛型类,它的类型参数要么已实例化,要么来源于子类(同样是泛 型类型)声明的类型参数。 泛型类型的成员 Class C{ PUBLIC V f1; PUBLIC D f2; PUBLIC C(V x){ This.f1=x; } } 泛型类型的成员可以使用泛型类型声明中的类型参数。但类型参数如果没有任何约 束,则只能在该类型上使用从SYSTEM.OJBECT继承的共有成员。 泛型接口 interface ILIST{ T[] GetElements(): } interface IDictionary{ void Add(K key,V value) } class List:IList,IDictionary{ public T[] GetElements(){return null;} public void Add(int index,T value){} } 泛型接口的类型参数要目已实例化,要么来源于实现类声明的类型参数 泛型方法的声明与调用 public calss Finder{ public static int Find(T[] items,T item){ for(int i=0;i(new int[]{1,2,3,4,5,6,8,9}, 6); 泛型方法的重载 class Myclass{ void F1(T[] a,int i); //不可以构成重载方法 void F1(U[] a,int i); void F2(int x); //可以构成重载方法 void F2(int x); void F3(T t) where T:A; //不可以构成重载方法 void F3(T t) where T:B; } 泛型方法的重写 abstract class Base{ public abstract T F(T t,U u) where U:T; public abstract T G(T t) where T:IComparable; } class Derived:Base{ //合法的重写,约束被默认继承 public override X F(X x,Y y){} //非法的重写,指定任何约束都是多余的 public override T G(T t) where T:Icomparable{} } 泛型约束 1。对“所有泛型类型或泛型方法的类型参数”的任何假定,都要基于“显示的约束”, 以维护类型安全 2。“显示约束”由WHERE字句表达,分为4种 基类约束 接口约束 构造器约束 值类型/引用类型约束
转载于:https://www.cnblogs.com/bloodycool/archive/2006/09/05/495161.html