在泛型类型定义中,这种写法是不正确的:
class FFF<T>
{
private T t;
public FFF()
{
t = new T();
}
}
编译将报错:变量类型“T”没有 new() 约束,因此无法创建该类型的实例如果为泛型类指定new()约束,则可以在泛型类中使用new()实例化泛型:
class FFF<T>
where T:new ()
{
T t = new T();
}where 子句用于指定泛型类型的约束,如果有多种约束,new() 约束出现在 where 子句的最后,new() 约束可以让编译器知道:为泛型提供的任何类型参数都必须具有可访问的无参数(或默认)构造函数。
Student stu = (Student)arr[length];编译时未指定范型的类型,而无法强制转换。
class FFF<T>
{
private T t;
public FFF()
{
t = new T();
}
}
编译将报错:变量类型“T”没有 new() 约束,因此无法创建该类型的实例如果为泛型类指定new()约束,则可以在泛型类中使用new()实例化泛型:
class FFF<T>
where T:new ()
{
T t = new T();
}where 子句用于指定泛型类型的约束,如果有多种约束,new() 约束出现在 where 子句的最后,new() 约束可以让编译器知道:为泛型提供的任何类型参数都必须具有可访问的无参数(或默认)构造函数。
Student stu = (Student)arr[length];编译时未指定范型的类型,而无法强制转换。
http://msdn.microsoft.com/zh-cn/library/sd2w2ew5.aspx
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
那为什么可以new一个数组呢?
数组:可以在一个数组数据结构中存储同一类型的多个变量。 通过指定其元素的类型声明数组。
new 约束:指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 如果要使用 new 约束,则该类型不能为抽象类型。
由此可见,数组不是一个类型而是一个集合,而new约束指定的是类型参数。
private string name;
private int age;
public Person(string n,int a){
name=n;
age=a;
}
}你那个就不能用
FFF<Person> f=new FFF<Person>()所以要用new()约束才行
第二个你只是创建了数组,数组空间分配了.,其实具体的对象空间是没有分配的.
但是并不是任意的类型 T 都具有无参构造函数的!所以你如果要写成 new T(),必须制定 T 是带无参构造函数:where T: new()
就这么简单。