对泛型不是很理解,比如建立一个泛型类class program<T>,然后实例化programe<T> vector = new programe<T>();这个对象vector是一个集合对吧,那这个集合里的元素到底是什么类型,是T还是programe类型的?请教下各位,若这个programe是一个接口呢?

解决方案 »

  1.   

    是T还是programe类型的?
    集合里的元素的类型是:typeof(T)若这个programe是一个接口?
    一样
      

  2.   

    当然是T类型啦!
    programe是你给泛型取的名字,
    如果把programe定义为泛型,好像就不能取同名的接口了吧
      

  3.   

    是一个T类型,
    <>号里面的东西就是类型,前面的program只是一个名称而已,所以是接口的话它也是一个T类型
      

  4.   

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,如下所示:C# 复制代码
    // Declare the generic class
    public class GenericList<T>
    {
        void Add(T input) { }
    }
    class TestGenericList
    {
        private class ExampleClass { }
        static void Main()
        {
            // Declare a list of type int
            GenericList<int> list1 = new GenericList<int>();        // Declare a list of type string
            GenericList<string> list2 = new GenericList<string>();        // Declare a list of type ExampleClass
            GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
        }
    }泛型概述
    使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。.NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList。您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。可以对泛型类进行约束以访问特定数据类型的方法。关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。
      

  5.   

    楼主怎么说到集合上了,请参考如下示例public class A<T>{
      public T Pt{get;set;}
    }//泛型类A//下面是在代码中使用它的情况://...
    A<string> a=new A<string>();
    A<int>a2=new A<int>();
    //...
      

  6.   

    如集合类型List<T>、IList<T>List<int> _list = new List<int>();
    _list.add(1);//类型是安全的,应为只能是int类型
    IList<string> _list2 = new List<string>();//接口实例化
    _list2.add("1");//只能是string类型//_list[0]、_list2[0] 中的类型就是实际使用实例的类型//ArrayList就会遇到类型安全问题