C# 关键字 使用where来限定泛型约束
用法如下:
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来限定泛型约束相关推荐
- 淡谈泛型约束T(转)
.net泛型约束 2007-10-06 14:08:54| 分类: .net |字号 订阅 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程是一种编程范式,它利用" ...
- C#高级语法之泛型、泛型约束,类型安全、逆变和协变(思想原理)
一.为什么使用泛型? 泛型其实就是一个不确定的类型,可以用在类和方法上,泛型在声明期间没有明确的定义类型,编译完成之后会生成一个占位符,只有在调用者调用时,传入指定的类型,才会用确切的类型将占位符替换 ...
- java泛型程序设计——类型变量限定 + 泛型代码和虚拟机
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 类型变量限定 + 泛型代码和虚拟机 的知识: [1]类型变量的限定 ...
- 第五节:泛型(泛型类、接口、方法、委托、泛型约束、泛型缓存、逆变和协变)
一. 泛型诞生的背景 在介绍背景之前,先来看一个案例,要求:分别输出实体model1.model2.model3的id和name值,这三个实体有相同的属性名字id和name. 1 public cla ...
- TypeScript泛型约束
泛型约束 有了泛型之后,一个函数或容器类能处理的类型一下子扩到了无限大,似乎有点失控的感觉.所以这里又产生了一个约束的概念.我们可以声明对类型参数进行约束. 我们还拿上文中的student栗子来说,想 ...
- 【整理】C#2.0泛型编程之概述、default()方法、别名指定与泛型约束
泛型概述 首先我们看一个在泛型出现之前通用的数据结构示例 通用数据结构类 Code public class Stack { object[] m_Items; public Stac ...
- 学习TypeScript 之 Pick与泛型约束
何为Pick? type Pick<T, K extends keyof T> = {[key in K]: T[key] } 就是从一个复合类型中,取出几个想要的类型的组合,例如: // ...
- Ts extends 泛型约束
extends 泛型约束 我们一般使用extends来继承接口或者类,但是extends还可以用来泛型约束 function getCnames<T extends { name: string ...
- .NET支持的泛型约束
.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型 where T : class T必须是一个类(class)类型 where T : new() | ...
最新文章
- TensorFlow机器学习实战指南之第一章
- 修改value_EXCEL批量名称修改
- 【Java】函数式编程
- mail函数 开启php,PHP mail函数使用详解
- Windows10使用Anaconda安装TensorFlow-GPU
- Java:JDBC(Mysql)
- 信息系统项目管理师(2022年) —— 第 11 章 项目风险管理
- S7-1200智能IO设备使用方法
- 九宫格数独游戏——回溯算法——java实现
- 曾经沧海难为水,除却巫山不是云。
- C#中的NewLine到底是什么字符?
- javascript冷门吗_冷门JS技巧
- 惠州 菜鸟机器人_马云在惠州建了一个“秘密基地”,超震撼!
- Ackerman函数
- SA-NET: Shuffle attention for DCNN 论文学习
- 《Oracle 10G 系统教程 中科院培训老师讲授》
- 面试官谈游戏开发入行--选择
- Android studio中如何利用Debug模式来调试程序
- 常见算法题(1)求最大公因数
- 5个技巧,帮助编程新手培养持续学习能力
热门文章
- 【文献翻译】思科路由器安全配置合规性的SCAP基准-SCAP Benchmark for Cisco Router Security Configuration Compliance
- 如何写一份优秀的微信营销方案
- mcu 与电量计 BQ40Z80 通信,读取电芯电量
- 【方向盘】启动命令和IDEA如何传递:VM参数、命令行参数、系统参数、环境变量参数、main方法参数
- So easy!非技术人员也能学会的土狗防骗技巧!
- POJ 3984-迷宫问题 (dfs)
- 最全小说资源网——连载阅读升级版(亲测好用)
- 如何解决:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
- (尚硅谷项目代码)java基础----家庭记事本
- Coremail论客副总裁:从传统走向自主可控,金融行业邮件系统的转型升级