关于c#泛类型参数T的约束

c#支持泛式编程,在我们定义泛型类时,可以加入泛类型参数T的约束。为什么需要参数约束呢,官方是这么说的:

如果要检查泛型列表中的某个项以确定它是否有效,或者将它与其他某个项进行比较,则编译器必须在一定程度上保证它需要调用的运算符或方法将受到客户端代码可能指定的任何类型参数的支持。

当实例化类时用于类型参数的类型种类施加限制。如果实现代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。约束是使用 where 上下文关键字指定的。下面列出了六种类型的约束:

T:结构
 类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。

示例:public class TestClass<T> where T : int
 
 T:类
 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。

示例:public class TestClass<T> where T : class
 
 T:new()
 类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。

示例:public class TestClass<T> where T : ITestClass, new()
 
 T:<基类名>
 类型参数必须是指定的基类或派生自指定的基类。

示例:public class TestClass<T> where T : ITestClass
 
 T:<接口名称>
 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

 示例:public class TestClass<T> where T : System.IComparable 
 
 T:U
 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。

示例:public class TestClass<T, U,> where T : U{ }


参考msdn地址:msdn.microsoft.com/zh-cn/library/d5x73970.aspx


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值