C# 泛型

代码重用,是每个开发者都很熟悉的概念,它让我们提高了开发效率,泛型就是基于这种思想,给我们提供的算法重用的机制

一、基本概念


像这样,就类似于在声明类型的时候,声明了一个未知类型T,这个T可以在Custom< T>中被当作正常的类型名使用
同样的,也可以声明一个泛型方法

它的好处显而易见,就是能让不同类型的类型使用同样的方法,而且强类型避免的装箱拆箱,提升了性能

二、逆变和协变泛型类型参数

泛型使用in关键字来标记逆变形式的泛型类型参数

这样,可以把类型实参为父类类型的委托,隐式赋值给子类类型为类型实参的委托

泛型使用out关键字来标记协变形式的泛型类型参数

这个是,协变的例子

注意:

(1)这种写法,只能用于委托和接口类型
(2)标记了in的类型参数,只能作为方法的参数使用,而标记了out的类型参数,只能作为方法的返回值使用
(3)int及out无法和ref及out一起使用

三、约束

约束可以理解成给你定义的泛型方法的泛型实参提供筛选条件

像这样,就限定了U必须是能转换成Parent的类型,使用时,传入Parent的对象或者它子类的对象都是可以的,但是其他的类型,例如int,string之类的对象,就会报错

1.主要约束

主要约束只能是代表非密封类的一个引用类型,最多只能指定一个主要约束,这就和类只能指定一个基类一样

###有两个特殊的class和struct

(1)class


代表类型实参是引用类型的

(2)struct


代表类型实参是值类型的

2.次要约束

次要约束就是代表接口类型的约束,和类继承接口的规则一样,接口类型的约束并不限制个数

有一种特别的次要约束,叫做类型参数约束

3.构造约束


表示类型参数是实现了公共无参构造的非抽象类型,所以允许类型构造对象

注意

(1)子类重写的方法的约束是从父类的方法继承下来的,不能再给子类实现的方法提供约束

就算是父类方法没有提供约束也不可以

(2)类类型的约束必须在其他类型的约束之前
(3)所有值类型都是拥有无参构造器的,所以struct和构造约束一起使用会报错

我会在我的公众号上推送新的博文,也可以帮大家解答问题
微信公众号 Andy and Unity 搜索名称或扫描二维码
在这里插入图片描述
希望我们能共同成长,共同进步

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值