一直没有好好学习泛型,今晚特意好好的学习
泛型实现了类型参数化!
通过参数化类型来实现在同一份代码上操作多种数据类型的目的
struct C<V,U>{}//泛型结构,具有两个泛型参数的V,U,<里面可以包含若干个类型参数>,参数在类中所处的位置,一般都是作为方法的参数类型,返回类型,字段,属性...
使用泛型是将类的共同行为提取出来,而将变化的部分抽象为类型参数,特别适合于使用同一段代码处理不同的数据类型的场景
C#中除了泛型类,泛型接口,泛型结构,泛型方法,泛型事件,泛型委托
在为类型参数添加约束约束之前,类型参数添加约束之前,类型参数将只能访问System.Object类型中的公有方法,如Equals(),GetHashCode()...
泛型约束写法
class Luck<T> where T:Suck{....}
约束类型共有六种
where T:Class 类型实参必须是引用类型(次序第一)
where T:struct 类型实参必须是值类型(同上)
where T:<base class name> 类型实参必须是指定的类或者他的派生类(同上)
where T:<interface name> 类型实参必须是指定的接口或者实现了该接口的类型,(不限个)
where T:new() 类型必须有一个无参的构造函数(次序放在最后)
where T:U 裸类型约束,我觉得这种是冗余的,如果只有一种类型,那么干嘛还用泛型,你说是吧
where 子句之间没有顺序,where 字句内部有次序要求
Class One<T>:Base{} 泛型类One<t>继承自非泛型基类Base
class Two<T>:Base<int> 封闭式构造类型示例
class Three<T>:Base<T> 开放式构造类型示例
泛型方法是使用类型参数声明的方法,看来有点想泛型委托,也可以对类型参数应用约束,如下
publicstaticTResultPring<T,TResult>(T msg)where TResult:new(){...}