A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 希望在明日 中级黑马   /  2012-9-18 20:02  /  2714 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是泛型,好像不太好理解啊,从字面上也不太好理解,可不可以简单的介绍下,泛型主要用来做什么的?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

倒序浏览
泛型,其实可以理解为集合的一种。它类似于数组,数组是内部储存一组数的集合。而集合是储存实例化的类(对象)的集合。但由于不同的对象实例化的类不同。不易使用和管理
泛型就是强类型化的集合。将集合内的元素规定为统一的类型(例如List<"Class">),在使用时由于内部的类型被强类型化为其规定的类型,所以使用起来也相对方便。不需要进行复杂的类型转换。
一般,当需要使用对个同类型的对象,或对一组同类型的对象进行管理时,就会遇到使用泛型了。就像需要一组数据时我们要使用数组一样,我们需要一组对象时就需要泛型了。
常用的泛型有:List<>  Dictionary<> 前者类似于数组,可以使用数字对其相对位置的对象进行索引。后者则使用键/值对,对内部的对象进行索引。
这是我的理解,希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
范型的意义在于免去了类型之间互相转换的系统开销,和同类方法的重载,

比如,add方法你要重载两个方法(int和double)或者更多方法,用范型只用写一个add方法就可以完成int,double,float......等等的相加,

再如,集合的操作,没有往往是弱类型(object),而用范型可以直接是强类型,无需转换之间的开销,节省了资源,

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
明光照 + 2
宋天琪 + 1

查看全部评分

回复 使用道具 举报
泛型分为以下几类:
1、泛型类:指定类中的字段为T,方法就是操作T类型的参数。
2、泛型接口:指定接口中操作T类型的参数。
3、泛型方法:操作T类型的参数。
4、泛型委托:委托操作T类型的参数。
T是类型参数,泛型的约束就是针对类型参数T进行约束。
List<T> 是开放类型,不允许实例化,类似于接口。
List<string>是封闭类型,每个封闭类型都有自己的静态成员。而且需要注意的是,List<string>与List<int>是两个毫无关系的类型。
List<T>继承Object,List<string>和List<int>也是继承Object,从List<string> 到List<T>只是一个替换过程。在生成的IL中,T只是一个占位符,JIT使用真实的类型替换T,生成本地指令。
需要说明的是,Java语言的泛型只是使用了一个障眼法,没有上述的替换过程,而是把T当成Object,运行的时候进行类型转换。仅仅在编译期保证了类型安全,运行的时候还必须进行类型转换,效率低,因为可能涉及拆箱装箱。

评分

参与人数 1技术分 +1 收起 理由
王松老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。
例子代码:
class Program
    {
        static void Main(string[] args)
        {
            int obj = 2;
            Test<int> test = new Test<int>(obj);
            Console.WriteLine("int:" + test.obj);
            string obj2 = "hello world";
            Test<string> test1 = new Test<string>(obj2);
            Console.WriteLine("String:" + test1.obj);
            Console.Read();
        }
    }
    class Test<T>
    {
        public T obj;
        public Test(T obj)
        {
            this.obj = obj;
        }
}
    输出结果是:
    int:2
String:hello world
程序分析:
1、  Test是一个泛型类。T是要实例化的范型类型如果T被实例化为int型,那么成员变量obj就是int型的,如果T被实例化为string型,那么obj就是string类型的。
2、  根据不同的类型,上面的程序显示出不同的值。

评分

参与人数 1技术分 +1 收起 理由
王松老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报

泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写  体验泛型代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
引入泛型的原因:
泛型不但能够实现代码重用;同时可以提高性能并且保证数据类型的安全
优点:
泛型类和泛型方法兼复用性,类型安全和高效率于一身,是与之对应的非泛型
泛型类常用于集合类

  集合类    <----->   泛型集合类
ArraryList  <----->    List<>
HashTable   <----->    Dictionary<>
Queue       <----->    Queue<>
Stack       <----->    Stack<>

评分

参与人数 1技术分 +1 收起 理由
王松老师 + 1 很给力!

查看全部评分

回复 使用道具 举报
泛型就是规定你集合里面要装对象的类型。
通俗的讲就像一个筐要你装鸡蛋你不能装馒头,你用了泛型就像给筐打了一个标志,告诉别人这里面装的是鸡蛋,当你想用的时候不用担心你拿出的是馒头。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
做个补充:
面向对象编程的一个好处是「代码重用」——通过继承等等。
而泛型(Generic)提供不但代码重用了,而且「算法重用
」。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马