泛型的四种约束

对于泛型类型或者泛型方法,可以对类型指定约束。约束放在类型声明的末尾,然后用where来引入。


1. 引用类型约束: (T : class), 即T必须是一个引用类型。必须放在第一个。

struct Test<T> where T : class


2. 值类型约束: (T : struct) 。 必须放在第一个。

struct Test<T> where T : struct


3. 构造函数类型约束 T :  new() , 必须放在最后一个。

传入的实参必须有一个public的无参构造函数。

适用于所有的值类型。所有没有显示声明构造函数的类,或者所有显示声明了一个公开的无参构造函数的类。

public void Test<T1, T2>() where T1 : class, new()


4. 转换类型约束 

class Sample<T> where T : Stream

class Sample<T1, T2> where T1: T2 (如Sample<Stream, IDisposable>

class Sample<T> where T : Stream, IEnumerable<string>, IComparable<int> 可以多个接口,但是只能一个class.


指定的类不能是结构,密封类比如string,或者这些特殊类型:

System.Object

System.Enum

System.ValueType

System.Delegate




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值