泛型

1、泛型和Object

Object的问题

1、装箱拆箱
object在堆里,如果把int传递进来,就会把值从栈里边copy到堆里(装箱)。使用的时候,又需要把对象值copy到栈里(拆箱)。
2、类型安全问题,对传递的类型没有限制
泛型方法:
方法名后面加尖括号,里边是类型参数
类型参数实际上是一个类型声明,里边的T就是一个占位符。
泛型思想:延迟声明:推迟一切可以推迟的。一切能晚点在做的事儿。就晚点再做

2、泛型

泛型不是语法糖,是CLR和IL一起升级达成的。webservice和WCF是不能用泛型的
泛型方法:为了一个方法满足不同的类型的需求
泛型类:一个类、满足不同类型的需求、List Dictionary
泛型接口:一个接口,满足不同类型的需求
泛型委托:一个委托,满足不同类型的需求
一个泛型来完成多个返回值不同或者参数不同的类似方法

3、泛型约束

再泛型方法后。where:T:Class/People,值类型、引用类型。等等。
可以把T当成基类

  • where T:people基类约束(只能有一个)
  • where T:Isport 接口约束(可以有多个)
  • where T:Class引用约束
  • where T:struct值类型约束
  • where T:new()无参数构造函数约束

密封类不可以进行约束,是没有意义的。
比如Where T:String,其中String就是一个密封类
泛型约束和直接使用基类是一样的。只不过可以更多的去扩展

4、协变、逆变

Func<int,string>
都是和泛型相关。只有接口委托存在。
协变:让右边可以用子类,让泛型用起来更加方便
用out修饰只能当返回值。不能当参数
其中string前面会有个out是协变,主要是返回值,

逆变:让右边可以用父类,
用in修饰只能当入参
其中int前面会有个in是逆变,主要是当作入参

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值