C# 泛型约束

【唐老狮】C#——泛型约束 上篇回顾 泛型语法 class类名<占位字母> 返回值类型函数名<占位字母>(参数类型参数...) 概念 泛型相当于类型占位符 占位字母可以有多个 占位字母一般为大写字母 定义类或方法时使用替代符代表变量类型 当真正使用类或者方法时再具体指定类型 种类 泛型类 泛型方法 上一篇文章,我们已经学习了泛型的基本知识点,泛型就是一个可以替代任何类型的一个占位符。那么如果我想约束使用者可以用的类型,应该如何处理呢?今天学习的知识... 阅读详情

主要约束

类型参数可指定零个或一个主要约束

不可指定的引用类型System.Object System.Array

System.Delegate System.MulticastDelegate

System.ValueType System.Enum System.Void

class Sample<T> where T: Stream
{

}
有两个特殊的主要约束class struct

class Sample<T> where T : class
{
    public void M()
    {
        T tmp = null;
    }
}
tmp被设为null是合法的,因为它是引用类型。若上述代码不对T作class的约束,则将不能通过编译
class Sample<T> where T : struct
{
    public static T Factory()
    {
        return new T();
    }
}
上述new T()也被为全法,T为值类型,而所有值类型都引式地有一个公共无参构造器

若改stuct为class将不能通过编译,不是所有的引用类型都有元参构造器

次要约束

类型参数可指定零个或多个次要约束

private static List<Tbase> ConvertIList<T, Tbase>(IList<T> list)
    where T:Tbase
{
    List<Tbase> baseList = new List<Tbase>(list.Count);
    foreach(Tbase atom in list)
    {
        baseList.Add(atom);
    }
    return baseList;
}
以上,指定了两个类型参数,其中T是由Tbase类型参数约束

多个约束的情形

class Sample<T1, T2> 
    where T1 : class, T2
    where T2 : IList<Int32>
{

}

构造器约束

类型参数可指定零个或一个构造器参数

class ConstructorConstraint<T>
    where T: new ()
{
    public static T Factory()
    {
        return new T();
    }
}
还记不记上面说过的”若改stuct为class将不能通过编译,不是所有的引用类型都有元参构造器“

加了无参构造器约束后,就可以用new()通过编译了

更清楚一点的情况

class ConstructorConstraint<T>
    where T: class, new ()
{
    public static T Factory()
    {
        return new T();
    }
}

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置 下载地址在文末。我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。 阅读详情

相关推荐

STM32MP157+AD7606BSTZ四通道IEPE传感器控制器实战(附电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器控制器设计实战,涵盖硬件架构、数据采集芯片对比、关键电路设计及信号处理算法。通过双核协同工作和优化算法,实现高精度振动监测与故障诊断,适用于工业机械状态监测等场景。

weixin_29171129的博客 367

【笔记】C# 泛型约束

🗽 泛型约束就是告知编译器类型参数必须具备的功能。在没有任何约束的情况下,类型参数可以是任何类型。编译器只能假定 System.Object 的成员,它是任何 .NET 类型的最终基类。当分配给泛型的类型参数不满足约束的类型时,编译器会报出 Compiler Error CS0452 的错误。在 C# 中允许使用 where 上下文关键字指定约束。表示为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。

好学若饥,谦卑若愚。 3817

网络攻防技术——MD5碰撞试验

一、题目 本次实验主要是加深大家对MD5碰撞及其原理的理解,使用SEED实验环境中的工具及编程语言,完成以下任务: a)使用md5collgen生成两个MD5值相同的文件,并利用bless十六进制编辑器查看输出的两个文件,描述你观察到的情况; b)参考Lab3_task2.c的代码,生成两个MD5值相同但输出不同的两个可执行文件。 c)参考Lab3_task3.c的代码,生成两个MD5值相同但代码行为不相同的可执行文件。 d)回答问题:通过上面的实验,请解释为什么可以做到不同行为的两个可执行文件具有相同的M

学习记录 3621

C#系列之泛型约束

让泛型的类有一定的限制。关键字:where。

2303_76354097的博客 1452

360加固DEX解密与ELF修复技术解析

本文深入解析360加固的DEX解密与ELF修复技术,详细介绍了其多层保护机制、Java层入口分析、Native层加载流程及反调试绕过技巧。通过RC4和zlib解密技术,结合Frida工具实现内存Dump和ELF文件修复,为逆向工程师提供实用解决方案。

weixin_29327525的博客 511

Python re库【正则表达式操作库】全面讲解及代码示例

以下是Pythonre库的全面讲解,包含主要功能、常用方法及代码示例。完整代码和注释附后。正则表达式(Regular Expression)是用于匹配、查找、替换字符串的工具,通过特定语法定义模式。?{n}[...][a-z]A|B\d[0-9]\D\s\S\w\Wre从字符串匹配模式,返回Match对象或None。在字符串中第一个匹配项,返回Match对象或None。返回所有匹配项的。返回所有匹配项的Match对象)。替换匹配项,返回新字符串。根据模式分割字符串,返回列表。通过。

记录点滴 1162

C# 泛型类型的约束详解与示例

泛型约束用于限制可以用于泛型参数的类型。通过使用约束,我们可以确保在泛型类型中可以调用特定类型的方法,从而提高代码的健壮性。类约束:指定泛型参数必须是某个类或其派生类。接口约束:指定泛型参数必须实现某个接口。引用类型约束:指定泛型参数必须是引用类型。值类型约束:指定泛型参数必须是值类型。无参数构造函数约束:指定泛型参数必须有一个无参数的构造函数。多重约束:为一个泛型参数指定多个约束。默认构造函数约束:使用无参数构造函数约束来创建泛型集合类。

qq_35320456的博客 3833

Python爬虫实战:逆向解析天猫商品详情API,精准捕获规格、SKU与促销活动

及浏览器开发者工具),绕过前端渲染的复杂性,直接逆向分析并调用其内部数据接口,从而高效、稳定地抓取商品的关键信息,包括商品规格、多维度SKU信息以及复杂的促销活动。print(f"SKU ID: {sku.sku_id}, 价格: ¥{sku.price}, 库存: {sku.stock}, 规格: {sku.props}")当你访问一个商品链接时,浏览器首先会加载一个几乎为空的HTML骨架,然后通过执行大量的JavaScript代码,向后台服务器发起多个异步请求,最终将获取到的数据填充到页面中。

2201_76125261的博客 1129

C#泛型约束

泛型的六种约束

qq_60069700的博客 6538

Vue3 - 强力解决前端下载二进制流pdf文件、下载成功后打开空白问题解决,或者获取PDF文件流,将blob对象转换成下载链接打开后一片空白(无论是否使用pdf插件下载,还是原生方法下载都完美解决)

vue3前端下载二进制流pdf文件,下载成功,打开空白问题解决,js下载PDF文件流,打开空白问题,VUE3 h5中的文件流下载和指定的url下载总结(解决下载后的pdf打开空白情况)pdfjs打开文件流空白,解决pdf文件流,预览全是空白页,pdf文件流,下载正常,但是预览全是空白页,前端JS获取PDF文件流,将blob对象转换成下载链接打开后一篇空白的问题,前端文件流下载后文件空白,前端下载文件流PDF文件显示空白 或 无法打开,在线预览PDF文件打不开白屏怎么办,前端axios请求二进制数据流转换生成

🏆 前端领域优质创作者 4618

C#上位机面试必问30题:机器视觉+工业通信+性能优化(含答案解析)

工业通信:围绕“稳定性”展开,重点答异常处理、断线重连、资源释放;机器视觉:围绕“精度+速度”展开,重点答预处理、ROI、参数优化;性能优化:围绕“UI不卡、内存不泄、效率不低”展开,重点答异步、限流、资源复用;面试加分项:结合实际项目案例(如“我在XX项目中用信号量解决了多设备并发卡顿问题”)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1509

C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托

泛型集合和ArrayList的装箱拆箱、常见的泛型类型、泛型类和泛型方法、泛型约束、 泛型委托泛型很难理解?不然在接触的一个新的概念的时候,总会感觉难以理解,当你掌握并能熟练地使用的时候,发现这个概念其实简单的,我相信大多数码农都会有这种似曾相识的感觉。可能大多数人刚学习泛型的时候觉得很难理解,当然我也是这样的,所以便写下这篇文章加深一下对泛型的印象。

dotNet全栈开发 4万+

塔石DTU通过MQTT传递数据教程

塔石通过MQTT通讯上传ADL400电表用电量。

renkai721的专栏 253

C#的泛型约束

可以看到,直接在编译阶段就报错,而错误原因是string类型可以为null,值类型不能为null,因为我们在创建泛型类时进行了值类型约束,所以非值类型不可用。泛型约束是C#泛型编程中的核心机制,它允许开发者限制泛型类型参数可以接受的类型范围,从而在编译时提供更强的类型安全性和更丰富的功能支持。class B<T> where T : struct//值类型约束只能放入值类型的参数。接口的实现和继承具有相似性,只要是实现了接口的类都可以作为参数输入,这边主要看多个约束的实现。b.Add1("张三");

dcy20040821的博客 1825

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C#—泛型约束

泛型约束就是告知编译器类型参数必须具备的功能。 在没有任何约束的情况下,类型参数可以是任何类型。 编译器只能假定 System.Object 的成员,它是任何 .NET 类型的最终基类。当分配给泛型的类型参数不满足约束的类型时,编译器会报出 Compiler Error CS0452 的错误。在 C# 中允许使用 where 上下文关键字指定约束,让泛型的类有一定的限制。

qq_3517289697的博客 1587

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C#进阶学习(二)泛型及泛型约束的认识

C#泛型允许通过类型参数(如T)定义类、方法、接口,使用时指定具体类型,避免装箱拆箱并提升类型安全。泛型类(如Stack<T>)实现逻辑复用,泛型方法支持灵活操作,泛型接口(如IRepository<T>)定义通用契约。约束机制(where T : constraint)限制类型参数范围,确保支持特定操作(如IComparable)。相比非泛型方案,泛型消除运行时类型风险,提升性能,是集合、设计模式等场景的核心技术。

FAREWELL00075的博客 1403

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C#五大泛型约束

C#六大泛型约束基类约束接口约束new()构造函数约束引用/值类型约束组合约束 基类约束 基类约束有两个功能,首先,它允许泛型类使用基类约束所定义的的成员,第二个功能是确保泛型类使用指定基类的类型实参,这意味着,在使用泛型类时,类型实参必须是基类本身或者是派生自该基类的类。 class Program { static void Main(string[] args) ...

qq_43893500的博客 7286

C# 泛型约束讲解

C# 泛型约束讲解为什么加约束约束关键字格式约束类型关键字各各类型实例值类型约束 ==struct==引用类型约束 ==class==无参构造函数 ==new()==某一类本身或者其派生类 ==T:类名==某一接口其派生类 ==T:接口名==另一泛型类型本身或者派生类型 ==T:K==字母多重约束单一字母多重约束不可组合类型例子顺序组合错误多个字母多重约束 为什么加约束 当我们用约束很爽的时候,有人说适当的加上约束比较好。可是为什么呢? 因为泛型是可以任意类型的,此时就有潜在的危险,当我们滥用泛

m0_48554728的博客 2209

c#泛型约束

泛型约束的使用以及可作用场景

LM001_csdn的博客 2724

C# 中泛型编程之泛型类、泛型方法、泛型约束详解

类型Type现在可以表示带有特定类型的实参(或绑定类型)或未指定类型的泛型(或称未绑定类型)。委托级别的约束只在声明委托变量和实例化委托时使用,类似于在类型和方法的作用范围中实施的其他任何约束。同时子类中的泛型方法不能重复基类泛型方法的约束,这一点和泛型类中的虚方法重写是有区别的,代码如下。////错误 重写和显式接口实现方法的约束是从基方法继承的,因此不能直接指定这些约束。类型参数必须具有无参数的公共构造函数。3.在子类重复基类的约束(在使用子类泛型参数时,必须在子类级别重复在基类级别规定的任何约束)

u011555996的博客 2886

C# 泛型编程之泛型类,泛型方法,泛型约束

  所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。   泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。在定义泛型类时,在对客户端代码能够在实例化类时,可以用类型参数的类型种类施加限制。

weixin_42565127的博客 2251

C#泛型和泛型约束

一、泛型:     所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。 二、泛型约束: 在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。这些限制称为约束。约束是使用 where 上下文关键字指定的。     下表列出了五种类型的约束: 约束 说明 ...

songjuntao8的专栏 864

C#中的泛型(约束、逆变、协变)

在 C# 中泛型是一项强大的特性,它允许你创建通用的类、接口、方法、委托等,这些通用的结构可以处理多种不同的数据类型,而无需为每种类型编写重复的代码。

Good_1001的博客 1964

C# 泛型详解(泛型类,方法,接口,委托,约束,反射 )

泛型(Generic),是将不确定的类型预先定义下来的一种C#高级语法,我们在使用一个类,接口或者方法前,不知道用户将来传什么类型,或者我们写的类,接口或方法相同的代码可以服务不同的类型,就可以定义为泛型。这会大大简化我们的代码结构,同时让后期维护变得容易。...............

熊思雨的博客 2万+

C#泛型和泛型约束之追根溯源

关于C#泛型约束 你好! 这是 泛型约束 所展示的欢迎页。 文章目录关于C#泛型约束1.这得从类说起**1>类:**1.1>.类的定义1.2> C#中的类【3种:抽象、密封、非抽象】1.3> C#中的类的赋值1.4> base的使用1.5> 类与继承的一个表格1.6> 类与方法的三个表格**2>一些名词解释:【若有不足,移驾百度】**2.OOP中,继承的两种方式**1>实现继承:****1.1>实现继承的重写/隐藏的方式**1.2>继承非抽象

飞浪纪元FE的博客 721
上一篇: C# 无参属性 set与get
下一篇: QList 多线程操作
conquerwave
博客等级 码龄18年 57粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值