这些都是介绍
比较
建议不要对类型参数使用 == 和 != 运算符,因为这些运算符仅测试引用同一性而不测试值相等性
如果需要测试值相等性,建议的方法是同时应用 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