用法如下:

public interface IEntity
{
}public class FutureResult<T> where T : class , IEntity , new()
{
}

使用where来限定T必须是class, 必须是继承自IEntity的类型,而且该类必须有无参构造函数

前面两个好理解,new()的意思就是说该类必须有公共的无参构造函数

如果我这样写:

public class CodeInfo: IEntity
{public CodeInfo(int i){}
}

那么我使用的时候会报错,如下图:

所以必须去掉这个参数为int的构造函数,因为类默认会添加一个公共无参构造,所以不写构造函数也是可以的。

比如这样,什么都没有的一个类:

public class CodeInfo: IEntity
{}

可以继承多个接口,如:

public class FutureResult<T> where T : class , IEntity ,IQueryable
{}

但是class必须位于最前面,new()必须位于最后

可以限定多个类型,如:

 public class FutureResult<T,Y>where T : class, IEntity, IQueryablewhere Y : struct{}

可以为T,和Y都限定类型

可以用于类,方法,和委托,如:

//可用于类:public class FutureResult<T> where T:IQueryable { }//可用于方法:public bool MyMethod<T>(T t) where T : class { }//可用于委托:delegate T MyDelegate<T>() where T : new()

C# 关键字 使用where来限定泛型约束相关推荐

  1. 淡谈泛型约束T(转)

    .net泛型约束 2007-10-06 14:08:54|  分类: .net |字号 订阅 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程是一种编程范式,它利用" ...

  2. C#高级语法之泛型、泛型约束,类型安全、逆变和协变(思想原理)

    一.为什么使用泛型? 泛型其实就是一个不确定的类型,可以用在类和方法上,泛型在声明期间没有明确的定义类型,编译完成之后会生成一个占位符,只有在调用者调用时,传入指定的类型,才会用确切的类型将占位符替换 ...

  3. java泛型程序设计——类型变量限定 + 泛型代码和虚拟机

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 类型变量限定 + 泛型代码和虚拟机 的知识: [1]类型变量的限定 ...

  4. 第五节:泛型(泛型类、接口、方法、委托、泛型约束、泛型缓存、逆变和协变)

    一. 泛型诞生的背景 在介绍背景之前,先来看一个案例,要求:分别输出实体model1.model2.model3的id和name值,这三个实体有相同的属性名字id和name. 1 public cla ...

  5. TypeScript泛型约束

    泛型约束 有了泛型之后,一个函数或容器类能处理的类型一下子扩到了无限大,似乎有点失控的感觉.所以这里又产生了一个约束的概念.我们可以声明对类型参数进行约束. 我们还拿上文中的student栗子来说,想 ...

  6. 【整理】C#2.0泛型编程之概述、default()方法、别名指定与泛型约束

    泛型概述 首先我们看一个在泛型出现之前通用的数据结构示例 通用数据结构类 Code public class Stack {     object[] m_Items;     public Stac ...

  7. 学习TypeScript 之 Pick与泛型约束

    何为Pick? type Pick<T, K extends keyof T> = {[key in K]: T[key] } 就是从一个复合类型中,取出几个想要的类型的组合,例如: // ...

  8. Ts extends 泛型约束

    extends 泛型约束 我们一般使用extends来继承接口或者类,但是extends还可以用来泛型约束 function getCnames<T extends { name: string ...

  9. .NET支持的泛型约束

    .NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型 where T : class T必须是一个类(class)类型 where T : new() | ...

最新文章

  1. TensorFlow机器学习实战指南之第一章
  2. 修改value_EXCEL批量名称修改
  3. 【Java】函数式编程
  4. mail函数 开启php,PHP mail函数使用详解
  5. Windows10使用Anaconda安装TensorFlow-GPU
  6. Java:JDBC(Mysql)
  7. 信息系统项目管理师(2022年) —— 第 11 章 项目风险管理
  8. S7-1200智能IO设备使用方法
  9. 九宫格数独游戏——回溯算法——java实现
  10. 曾经沧海难为水,除却巫山不是云。
  11. C#中的NewLine到底是什么字符?
  12. javascript冷门吗_冷门JS技巧
  13. 惠州 菜鸟机器人_马云在惠州建了一个“秘密基地”,超震撼!
  14. Ackerman函数
  15. SA-NET: Shuffle attention for DCNN 论文学习
  16. 《Oracle 10G 系统教程 中科院培训老师讲授》
  17. 面试官谈游戏开发入行--选择
  18. Android studio中如何利用Debug模式来调试程序
  19. 常见算法题(1)求最大公因数
  20. 5个技巧,帮助编程新手培养持续学习能力

热门文章

  1. 【文献翻译】思科路由器安全配置合规性的SCAP基准-SCAP Benchmark for Cisco Router Security Configuration Compliance
  2. 如何写一份优秀的微信营销方案
  3. mcu 与电量计 BQ40Z80 通信,读取电芯电量
  4. 【方向盘】启动命令和IDEA如何传递:VM参数、命令行参数、系统参数、环境变量参数、main方法参数
  5. So easy!非技术人员也能学会的土狗防骗技巧!
  6. POJ 3984-迷宫问题 (dfs)
  7. 最全小说资源网——连载阅读升级版(亲测好用)
  8. 如何解决:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
  9. (尚硅谷项目代码)java基础----家庭记事本
  10. Coremail论客副总裁:从传统走向自主可控,金融行业邮件系统的转型升级