首页 > 其他分享 >泛型类型约束

泛型类型约束

时间:2023-02-20 15:45:05浏览次数:26  
标签:约束 类型 基类 泛型 new where

一.new 约束

new 约束指定泛型类声明中的类型实参必须有公共的无参数构造函数。 若要使用 new 约束,则该类型不能为 抽象类型。 当泛型类创建类型的新实例时,请将 new 约束应用于类型参数,如下面的示例所示:

class ItemFactory<T> where T : new()
{
public T GetNewItem()
{
return new T();
}
}

当与其他约束一起使用时, new() 约束必须最后指定:

public class ItemFactory2<T>
where T : IComparable, new()
{ }

二.where(泛型类型约束)

泛型定义中的 where 子句指定对用作泛型类型、方法、委托或本地函数中类型参数的参数类型的约束。 约束可 指定接口、基类或要求泛型类型为引用、值或非托管类型。 它们声明类型参数必须具备的功能。 例如,可以声明一个泛型类 AGenericClass ,以使类型参数 T 实现 IComparable 接口:

public class AGenericClass<T> where T : IComparable<T> { }

where 子句还可包括基类约束。 基类约束表明用作该泛型类型的类型参数的类型具有指定的类作为基类(或者 是该基类)。 该基类约束一经使用,就必须出现在该类型参数的所有其他约束之前。 某些类型不允许作为基类约 束:Object、Array 和 ValueType。 在 C# 7.3 之前,Enum、Delegate 和 MulticastDelegate 也不允许作为基类约束。 以下示例显示现可指定为基类的类型:

public class UsingEnum<T> where T : System.Enum { }
public class UsingDelegate<T> where T : System.Delegate { }
public class Multicaster<T> where T : System.MulticastDelegate { }

 

标签:约束,类型,基类,泛型,new,where
From: https://www.cnblogs.com/tx1185498724/p/17137675.html

相关文章

  • 数据类型-数值型-内置方法
    简要说明:数据类型数据类型是用来记录事物状态的,而事物的状态是不断变化的(如:一个人年龄的增长(操作int类型),单个人名的修改(操作str类型),学生列表中增加学生(操作list类型)等)......
  • golang拾遗:实现一个不可复制类型
    这是golang拾遗系列的第六篇。这个系列主要用来记录一些平时不常见的知识点,偶尔也会实现些有意思的小功能,比如这篇。golang拾遗系列目录:golang拾遗:指针和接口golang拾......
  • SAP物料类型
    1.物料主数据界面设置行业领域默认值并隐藏行业领域 2.物料类型设置:主要控制视图需要维护的部门,是否可以采购,及是否进行数量或者价值更新等操作spro-->后勤常规-->......
  • 泛型概述
    泛型概述Author:MsuenbDate:2023-02-20所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将......
  • Java面试宝典_君哥讲解笔记02 描述JDK、JRE、JVM之间的关系、如果main方法声明成priva
    系列文章目录文章目录​​系列文章目录​​​​java基础面试题​​​​请描述JDK、JRE、JVM之间的关系​​​​如果main方法被声明成private会怎么样呢?​​​​&和&&区别在......
  • 类型转换
    ## 类型转换> **二进制**>> 1. 在计算机运算的时候,都是以 **补码** 的方式来运算的。> 2. 二进制 转为 十进制,必须使用 **二进制的原码** 进行转换 。......
  • 泛型集合
    importjava.util.ArrayList;importjava.util.Iterator;publicclassDemo01{publicstaticvoidmain(String[]args){//泛型的好处:1.提高代码的重用性......
  • 【Go】类型转换
    字符串转int32packagemainimport( "fmt" "strconv")funcmain(){ str:="12345" num,err:=strconv.ParseInt(str,10,32) iferr!=nil{ fmt.Print......
  • springboot Elasticsearch 实体创建索引设置Date 类型字段失败
    springbootElasticsearch实体创建索引设置Date类型字段失败,需添加以下注解@Field(type=FieldType.Date,format=DateFormat.custom,patter......
  • 泛型接口
    //泛型接口:接口名<T>,不能泛型静态常量publicinterfaceMyGeneric<T>{Stringname="张三";Tserver(Tt);}publicclassMyGenericImplimplementsMyGeneric......