在泛型类型定义中,这种写法是不正确的:
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];编译时未指定范型的类型,而无法强制转换。

解决方案 »

  1.   

    class FFF<T> where T:new()new 约束
    http://msdn.microsoft.com/zh-cn/library/sd2w2ew5.aspx
      
    *****************************************************************************
    签名档: http://feiyun0112.cnblogs.com/
      

  2.   


    那为什么可以new一个数组呢?
      

  3.   

    C# 编程指南:
    数组:可以在一个数组数据结构中存储同一类型的多个变量。 通过指定其元素的类型声明数组。
    new 约束:指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 如果要使用 new 约束,则该类型不能为抽象类型。
    由此可见,数组不是一个类型而是一个集合,而new约束指定的是类型参数。
      

  4.   

    第一个如果你是这个这个类public class Person{
     private string name;
     private int age;
     public Person(string n,int a){
       name=n;
       age=a;
     }
    }你那个就不能用
    FFF<Person> f=new FFF<Person>()所以要用new()约束才行
    第二个你只是创建了数组,数组空间分配了.,其实具体的对象空间是没有分配的.
      

  5.   

    对于任意一个类型 T,你动动脑子想想,我是不是可以定义一个 T 类型的数组?对不对?
    但是并不是任意的类型 T 都具有无参构造函数的!所以你如果要写成 new T(),必须制定 T 是带无参构造函数:where T: new()
    就这么简单。