关于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
————————————————
版权声明:本文为CSDN博主「morphyyang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/morphyyang/article/details/28428467

posted @   dreamw  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-03-10 docker构建镜像
2021-03-10 [C#]LINQ中如何按实体的某个属性去重
2021-03-10 .NET Core项目部署到Linux(Centos7)(九)防火墙配置,允许外网或局域网访问.NET Core站点
2021-03-10 c++ 手动加载 netcore_在基于Debian开发的Deepin上快速搭建.net core开发环境
2021-03-10 git的基本使用流程演示
2021-03-10 .NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你
2021-03-10 DotNetCore深入了解:HTTPClientFactory类
点击右上角即可分享
微信分享提示