当前位置: 首页 > article >正文

泛型的约束有哪几种?(C#)

目录

 1  值类型约束(where T : struct)

 2  引用类型约束(where T : class)

 3  无参构造函数约束(where T : new ())

 4  基类约束(where T : <基类名>)

 5  接口约束(where T : <接口名>)

 6  类型参数约束(where T : U)

 7  多个约束组合


 1  值类型约束(where T : struct)

要求类型参数T必须是值类型,不能是引用类型。所有的内置数值类型(如intdouble等)、enum类型以及自定义的结构体等都满足这种约束。

 2  引用类型约束(where T : class)

规定类型参数T必须是引用类型,包括类、接口、委托、数组(数组在 C# 里是引用类型,不管里面装的值类型还是引用类型的数据。这可能和其他一些语言不同,比如 C++ 中的数组是值类型。C# 将数组设计为引用类型,是为了统一内存管理、支持继承多态以及保持与其他引用类型的一致性。这一设计简化了开发者对数组的使用,并充分利用了 CLR(公共语言运行时)的特性。)等。

 3  无参构造函数约束(where T : new ())

要求类型参数T必须具有一个无参数的公共构造函数,这样在泛型代码中才可以使用new关键字创建T的实例。

 4  基类约束(where T : <基类名>)

表明类型参数T必须是指定基类或从该基类派生的类。

 5  接口约束(where T : <接口名>)

意味着类型参数T必须实现指定的接口,保证在泛型代码中可以调用接口中定义的成员。

 6  类型参数约束(where T : U)

表示类型参数T必须是另一个类型参数U或从U派生的类型,用于建立类型参数之间的继承关系约束。

 7  多个约束组合

可以同时使用多个约束来更精确地限制类型参数。

class MyContainer<T> where T : class, IComparable<T>, new()
{
    // T必须是引用类型,实现了IComparable<T>接口,并且有一个无参构造函数
}


http://www.kler.cn/a/565435.html

相关文章:

  • Linux 下使用tracepath进行网络诊断分析
  • Prometheus2.53.3 | 监控系统安装与配置指南(已成功安装)
  • U盘安装VMWARE虚拟机
  • 小红的回文子串(B组)
  • Web自动化之Selenium 超详细教程(python)
  • 使用vscode导出Markdown的PDF无法显示数学公式的问题
  • 工具MyBatis Generator(MBG)
  • 【Java项目】基于Spring Boot的旅游管理系统
  • 纷析云:赋能企业财务数字化转型的开源解决方案
  • 苍穹外卖-阿里云OSS文件上传
  • Java语法基础知识点1
  • android studio 中止了一个已建立的连接
  • C++11相较于C++98的新特性介绍:列表初始化,右值引用与移动语义
  • Java和JavaScript的比较
  • MQ 笔记
  • 父子继承与转型
  • Redis 底层数据结构 —— SDS(简单动态字符串)
  • AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构
  • 解决各大浏览器中http地址无权限调用麦克风摄像头问题
  • 按键精灵安卓/ios脚本的连点器的坐标点获取教程