请问这个泛型类型约束是什么意思?
发布网友
发布时间:2022-12-16 18:54
我来回答
共1个回答
热心网友
时间:2024-10-03 19:26
要T是继承于A
where T: A
要T继承于B的
where T: B
在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加*。如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。这些*称为约束。约束是使用 where 上下文关键字指定的。下表列出了六种类型的约束:
约束
说明
T:结构
类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。有关更多信息,请参见使用可以为 null 的类型(C# 编程指南)。
T:类
类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
T:new()
类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。
T:<基类名>
类型参数必须是指定的基类或派生自指定的基类。
T:<接口名称>
类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
T:U
为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。
//---------------------------------
补充,由于泛型约束表达式全部是“AND”关系,所以不可能表示出“或”关系来,而且C#不支持多重继承,所以楼主的,这种或继承自A,或继承自B的需求,是无法实现的。追问
首先谢谢你的回复,我参考别人的项目是这样写的,编译也通过了,是否这是另的类型
泛型的高级用法
首先,类型约束是泛型的一种高级用法,它允许开发者在泛型参数上应用某些约束,以便在泛型代码中使用特定类型的方法。例如,可以约束泛型类型必须实现某个接口或继承自某个基类。这有助于减少类型转换的需要,并提高代码的可读性和可维护性。其次,泛型接口允许我们定义可以接受任何类型的参数的接口。这意味着...
泛型中new()构造函数参数约束到底是什么意思?
new() 约束的意思是 传入的类参数 必须具有可访问的无参数(或默认)构造函数。就是说传入的这个类必定能通过new()来进行实例化
Scala泛型中的Liskov哲学
泛型最常用在Collection集合当中,表示“这是一个装载什么元素的”集合。 同时,为了限制这个泛型E类型,我们又为泛型制定了上界,下界的概念,又称之为类型约束。在Scala中,类型约束的方式除了泛型上下界之外,还可以通过视图界定,和上下文界定来实现,这两种方式主要和之前所学习的隐式转换和隐式值有关联。 此外,设T1和T2...
C#中的where从句
泛型类定义时的where子句表示的是泛型类型约束,也就是对泛型需要满足的条件的一个限制。比如 where T: IComparable, new()说明,这里的泛型T必须实现IComparable接口,并且必须有公有无参数构造函数。因为泛型为中可能会用到一些与泛型相关的操作,但因为是泛型,所以不能保证使用时的泛型一定能进行这项...
java中什么叫泛型??
泛型允许您表达这样的类型约束,即 m 是一个将 String 键映射到 String 值的 Map。这可以消除代码中的强制类型转换,同时获得一个附加的类型检查层,这个检查层可以防止有人将错误类型的键或值保存在集合中。下面的代码示例展示了 JDK 5.0 中集合框架中的 Map 接口的定义的一部分:public interface Map<K, V> {...
C#泛型 类型约束
类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。T:U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。//--- 补充,由于泛型约束表达式全部是“AND”关系,所以不可能表示出“或”关系来,而且C#不支持多重继承...
C# 泛型的原理、引入、缓存、约束及泛型的“协变”和“逆变”
泛型缓存本质是一个泛型类,泛型类会根据调用的不同类型生成不同的副本;约束可分为:基类约束,接口约束,引用类型约束,值类型约束,无参数构造函数约束。为了架构层面上可能会产生类型安全的问题,所以引入协变和逆变。协变: Out 只能做返回值 ,不能做参数,其实是一种为了避开风险而存在的一种约束...
什么是泛型,泛型的作用是什么(泛型有什么作用)
但是DotNet的泛型有个比较制肘地方,就是你很难对数值类型(值类型)进行算法抽象,因为这牵涉到运算符重载的问题,同时DotNet的泛型的类型参数也不能约束成一个基元值类型(如int、double、float)。)它有什么优势?第一:源代码保护。(如果你知道C++模板对泛型的实现机制,就会知道C++在编译的时候根据...
TS泛型类、泛型接口、泛型函数
泛型是一种参数化数据类型,具有以下特点 1:定义时不明确,使用时必须明确成 某种具体数据类型 的数据类型【泛型的宽泛】 2:编译期间进行 数据类型安全检查 的数据类型【泛型的严谨】泛型类的格式: class 类名<泛型形参类型>{ } 泛型约束简单点说就是把泛型的具体化数据类型范围缩小 T e...
java中Map<?,?>是什么意思
<?,?>这个是泛型,在实例应用的时候,一个集合一般只存储一种类型的数据,所以我们可以通过泛型来约束集合中元素的类型,这个在多处都可以使用,比如在Collection<T>集合和Map<T,T>中通过泛型约束存储元素的数据类型;以下解释为什么泛型中只使用对象来约束数据类型:因为集合只能存储引用类型数据,所以在...