我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019全年资料大全正版 > 泛型类型变量 >

C 泛型类 构造方法中实例化T

归档日期:06-24       文本归类:泛型类型变量      文章编辑:爱尚语录

  t = new T(); // 出错,提示: 变量类型“T”没有 new() 约束,因此无法创建该类型的实例

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  t = new T[10]; 这句代码是【创建】一个T类型的长度为10的【数组】。

  但是当需要对MyElement进行实例化的时候,却不能使用new(),只要添加如下代码即可进行实例化了:

  在这里,where实际上对泛型类型T的一个限定或补充。如果你希望T是一个int的集合,这个集合可以是Listint,也可以是HashSetint等等,只要它们都是从ICollection继承而来的,则可以添加对类型T的限定,同时要保证它还是可以实例化的:

  进一步,如果希望放宽集合中元素的类型,比如只要是int,double等可比较的类型,它们都是从IComparable继承而来,则可以继续添加如下限定:

  不同的T构造的方式是不同的,有点需要1000字节的内存,有的需要8字节内存。而数组不同,它只是个容器,占用内存统一是一个引用,等你给数组这个容器里添加实际内容的时候,同样需要约束,比如t = new T[10]; t[0]=new T();后一句才是真正的new了一个T,前一句只是声明容器。

  new T[10]只是声明,还没赋值,只是10个空指针,你知道不管是什么对象的指针都基本是个整数,所以和类型无关。而new是实实在在地开辟了T类型的空间。

本文链接:http://buggystordera.com/fanxingleixingbianliang/683.html