c#泛型

2023-11-15

参考博文:http://www.cnblogs.com/1175429393wljblog/p/5519701.html

泛型类型参数:其是一个占位符,不是一个真正的类型,而更像是一个类型的蓝图。当我们在声明,实例化该类型的变量时,则把T改为指定的类型。

eg:class Mylist<T>{....}  

Mylist<float> list1 = new Mylist<float>();

类型参数的约束:一个约束是一种基类约束,他通知编译器,只有这个类型的对象或从这个类型派生出来的对象,可被用作类型参数。一旦编译器得到这种保证,它就允许泛型类中调用这个类型的方法。上下文用where用以实现约束。

eg:public class Employee{...}

class MyList<T>where T:Employee{...}

约束使得泛型类能够使用Employee.Name的属性,因为所有为T类型的元素,都是一个Employee对象或是一个继承自Employee的对象。

class MyList<T> where T: Employee, IEmployee,  IComparable<T>,  new()
{…}
下面列举6种类型的约束:
T: 结构---类型参数必须是值类型。可以指定除Nullable以外的任何值类型。
T: 类---类型必须是引用类型。这一点也适用于任何类,接口,委托或数组的类型。
T: new()----类型参数必须是具有无参数的公共构造函数。当与其他约束一起使用时,new()约束必须最后指定。
T: <接口名称>---类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束也可以是泛型的。
T:U----为T提供的类型参数必须是为U提供的参数或派生自为U提供的参数。这被称为裸类型约束。
如果对泛型成员执行任何赋值以外的操作,或者是调用System.Object中所没有的方法,就需要在类型参数上使用约束。
无类型约束
当约束是个泛型类型参数时,他就叫无类型约束,当一个有类型参数成员方法,要把它的参数约束为其所在类的类型参数时,无类型约束就很有用。
eg: class List<T>
{
void Add<U>(List<U> items)where U:T{}
}
当无类型约束在泛型类中定义时,其一定要和其他类型参数一起在<>中申明因为编译器值认为无类型约束是从System.Object继承而来,所以带有无类型约束的泛型类很有限。
当你希望两个类型参数有继承关系,可对泛型类型使用无类型约束
public class MyClass<T,U,V> where T : V
泛型类
  非泛型的具体类可以继承自封闭构造基类,但不能继承自开放构造基类。这是因为客户代码无法提供基类所需的类型参数
2.泛型的具体类可以继承自开放构造类型。除了与子类共用的类型参数外,必须为其他所有的类型参数指定类型,如下代码所示:
//Generates an error.
class Node<T> : BaseNode<T, U> {…}
//Okay.
class Node<T> : BaseNode<T, int>{…}
3. 泛型类型可以使用多种类型参数和约束
4.开放结构和封闭构造类型型可以用作方法的参数
5..泛型类可以继承自具体类、封闭构造类型或开放构造类型
泛型接口
  当一个接口被指定为类型参数的约束时,只有实现该接口的类型可被用作类型参数
可以在一个类型指定多个接口作为约束
一个接口可以定义多个类型参数
泛型类可以实现泛型接口或封闭构造接口,只要类的参数列表提供了接口需要的所有参数
泛型类可以实现泛型接口或封闭构造接口,只要类的参数列表提供了接口需要的所有参数
eg: class Myclass<T>:IBaseinterface<T>
class Myclass<T>:IBaseinterface<T,string>
泛型方法
静态方法和实例方法有着同样的类型推断规则。编译器能够根据传入的方法参数来推断类型参数
泛型委托
C#2.0版有个新特性称为方法组转换(method group conversion),具体代理和泛型代理类型都可以使用
eg: MyDelegate<int> m = new MyDelegate<int>(Notify);
MyDelegate<int> m = Notify;
引用委托的代码必须要指定所在类的类型参数
eg: Stack<float> s = new Stack<float>();
Stack<float>.StackDelegate myDelegate = StackNotify;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#泛型 的相关文章

随机推荐

  • ps多种去水印方法与技巧-适合各种水印

    ps作为一款功能强大的图片处理软件 有着丰富的功能 ps去水印也是我们常用的一种功能 但是在我们日常使用中遇到的水印千奇百怪 不同的水印就需要使用不同的去水印方法 方法一 ps内容识别去水印 1 套索工具圈出水印 2 选择 编辑 填充 内容
  • 深度学习中的优化算法之Adam

    之前在https blog csdn net fengbingchun article details 124909910 介绍过深度学习中的优化算法Adadelta 这里介绍下深度学习的另一种优化算法Adam 论文名字为 ADAM A M
  • 在linux中怎么查看错误日志

    在linux中怎么查看错误日志 cat或者tail f命令日 志 文 件 说 明 var log message 系统启动后的信息和错误日志 是Red Hat Linux中最常用的日志之一 var log secure 与安全相关的日志信息
  • Arthur and Table 【CodeForces - 557C】【Splay】

    题目链接 有一张桌子 有n个腿 第i根腿的长度是li 现在要拿掉一些腿 使得桌子稳定 拿掉第i根腿需要di的能量 稳定的条件是 假如拿掉若干条腿之后 桌子还有k个腿 那么长度最长的腿的数目要超过一半 比如桌子有5根腿 那么至少要有三根腿是最
  • 2016年终总结与来年计划

    光阴似箭 日月如梭 眨眼间已到年底 今年感慨颇丰 获益良多 因为我认为努力了就肯定会有收获 哪怕是收获那一滴滴辛勤的汗水 我在公司任务轻松时 加了些前端群 重点推荐豪情群 在群里分享技术以及生活的点滴 同时认识了一些志同道合的朋友 有大牛建
  • C/C++: 生成不重复的一组随机数

    在程序编写过程中 很多情况下回用到随机数 然而单纯的随机数不能保证每一次的数据都不同 下面方法返回一组不重复的数据 1 方法 随机一组数据 std vector
  • 432. 全 O(1) 的数据结构

    题目 请你设计一个用于存储字符串计数的数据结构 并能够返回计数最小和最大的字符串 实现 AllOne 类 AllOne 初始化数据结构的对象 inc String key 字符串 key 的计数增加 1 如果数据结构中尚不存在 key 那么
  • kubernetes最佳实践(二) - dashboard ui和heapster监控部署

    前言 本章节主要包行两个部分 官方dashboard部署 版本是1 6 3 1 5 0我也试过成功的 给dashboard加上仪表盘监控 我们安装heapster为dashboard安装统计功能和仪表盘 如下图 1 安装dashboard
  • kubeadm搭建k8s高可用集群(keepalived+nginx+3master)

    目录 前言 服务器准备 架构讲解 环境初始化 安装keepalived软件 安装nginx软件 初始化k8s节点 安装docker 初始化master01节点的控制面板 master02 master03节点加入集群 node01 node
  • Java中进行H264数据的I帧判断

    要判断从编码器中获取到的一帧Byte数组是I帧还是P帧 首先需要了解H264数据的基本格式 I帧 帧内编码 P帧 前向预测编码 与前一个I帧比较差异 B帧 双向预测编码 与前后帧比较差异 H264流 首帧数据为SPS和PPS 后面为IPPP
  • 旅行售货员问题-回溯法

    排列树问题 问题描述 某售货员要到若干城市去推销商品 已知各城市之间的路程 旅费 他要选定一条从驻地出发 经过每个城市一遍 最后回到驻地的路线 使总的路程 总旅费 最小 输出结果
  • Android傻瓜式脚本录制

    网易游戏的AirtestIDE是目前比较优秀的脚本录制工具 它不需要手机ROOT 也不需要其他的任何操作 直接普通的手机就可以在线调试 执行脚本 而且支持跨平台 也就是说PC WEB IOS它一样行 如上图 Airtest 是图像匹配的方式
  • 解决goland代码全部莫名报错 找不到依赖的问题

    我遇到的问题是 代码在一台电脑上完全能够运行 切到另一台电脑 git pull之后 代码依旧能运行 但goland识别到依赖全部报错 找不到各种依赖 go mod download未能解决问题 因为代码能跑 说明第三方包都安装了 解决方案
  • matlab实现RCNN(二)

    本文在MatlabR2016b上使用自带的深度学习工具实现RCNN来进行车辆检测 实验环境 训练图片数量 825 网上收集 部分公共数据集 图片车辆数量 2300 对每张图片手工标注label得到 实验环境 MatlabR2016b 自带深
  • Matlab实现自适应动态规划多层神经网络的算例汇总

    使用MATLAB实现自适应动态规划 ADP 多层神经网络的算例 包括扭摆系统 仿射非线性算例以及 质量 弹簧 阻尼 系统 扭摆系统 torsional pendulum system 文献出处 1 Liu D Wei Q Policy It
  • 大数据模型部署思路

    提出问题 以神经网络为例 MATLAB可以用训练集来训练数据 随后用测试集来检测模型准确度 最后用该模型来决策新数据 在大数据平台下如何训练数据呢 又如何用训练好的模型对新数据进行决策呢 方法1 spark自带机器学习库mlib 用原生机器
  • bootstrap-table按住Shift多选设计思路-优化

    在网上找到bootstra table按住shift实现多选的思路后 进行改进 实现批量选中 批量取消选中 批量选中后取消部分选中并保留剩下选中项 向上 向下批量操作 参考地址 https blog csdn net qq 36360308
  • 计算机二级Java(第一份)

    1 1 第三范式是在第二范式的基础上消除了 非主属性对键的传递函数依赖 第三范式是为了消除数据库中关键字之间的依赖关系 2 冯诺依曼 输入 存储 运算 控制 输出 3 一般情况下 划分计算机四个发展阶段的主要依据是 计算机所采用的基本元器件
  • PPTP协议简述

    http jiaoyu 3158 cn 20121128 n4230270592726 html PPTP Point to Point Tunnel Protocol 点对点隧道协议 是建立在PPP Point to Point 点对点协
  • c#泛型

    参考博文 http www cnblogs com 1175429393wljblog p 5519701 html 泛型类型参数 其是一个占位符 不是一个真正的类型 而更像是一个类型的蓝图 当我们在声明 实例化该类型的变量时 则把T改为指