这些都是介绍

比较
建议不要对类型参数使用 == 和 != 运算符,因为这些运算符仅测试引用同一性而不测试值相等性

如果需要测试值相等性,建议的方法是同时应用 where T : IComparable<T> 约束,并在将用于构造泛型类的任何类中实现该接口。

 

class list<T>
{
public T add(T s)

}
使用上面: list<int> t=new list<int>(); t.add(5);

泛型作用:类的写法不变,只是引入了通用数据类型T就可以适用于任何数据类型,并且类型安全的

实例化泛型对象的时候,一定要在类名后面指定T的具体类型
一个使用参数化类型的泛型类,象MyClass1<T>,称作开放结构的泛型。
一个不使用参数化类型的泛型类,象MyClass1<int>,称作封闭结构的泛型。
public class MyClass2<T> : MyClass1<int> 有效
public class MyClass2<T> : MyClass1<T> 有效
public class MyClass2<T> : MyClass1<Y> 无效


public class MyClass : MyClass1<int> 有效
public class MyClass : MyClass1<T>   无效

在设计泛型类或方法时,如果要对泛型成员执行除简单赋值之外的任何操作或调用 System.Object 不支持的任何方法,您将需要对该类型参数应用约束。(这个是要重点注意)

没有约束的类型参数(如公共类 SampleClass<T>{} 中的 T)称为未绑定的类型参数

用作约束的泛型类型参数称为裸类型约束

泛类型————————————————————————————————
每一个(T不同)泛类型的实力对象都各是一个类


 //声明泛方法方法名 3个T要一致
  public static void Copy<T>(List<T> source, List<T> destination)
 {
  foreach (T obj in source)
  {
   destination.Add(obj);
  }
 }

//使用泛类型方法
static void Main(string[] args)
 {
  List<int> lst1 = new List<int>();
  lst1.Add(2);
  lst1.Add(4);
  List<int> lst2 = new List<int>();
  Copy(lst1, lst2);
  Console.WriteLine(lst2.Count);
 }


声明泛型时T代表一个占位
继承一个泛型或使用一个泛型对象时 要用具体类型代替T

posted on 2007-08-07 18:35  HHQQ  阅读(209)  评论(0编辑  收藏  举报