当前位置:编程学习 > C#/ASP.NET >>

泛型到底是个什么概念?

麻烦各位的大侠给点学习资料,
谢谢 --------------------编程问答-------------------- 百度一下 --------------------编程问答-------------------- 使用泛型可以最大限度的重用代码,保护类型的安全以及提高性能  
泛型解决了boxing/unboxing和避免了类型转换
参照MSDN:

泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,

http://topic.csdn.net/u/20090622/21/DF7F7B8A-61CD-4C8F-A964-0FE15377523D.html --------------------编程问答-------------------- 用它可以定义安全的数据结构,如List<类型>集合 --------------------编程问答-------------------- 什么是泛型
  泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行。   泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写  体验泛型
代码时定义一些可变部份,那些部份在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
泛型的定义
  泛型的定义主要有以下两种:   在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(现在人们大多把这称作模板)不论使用那个定义,泛型的参数在真正使用泛型时都必须作出指明。   一些强类型编程语言支援泛型,其主要目的是加强类型安全及减少类转换的次数,但一些支持泛型的编程语言只能达到部份目的。

.NET Framework 的泛型
  由于.NET Framework 泛型的类型参数之实际类型在运行时均不会被消除  泛型约束
,运行速度会因为类型转换的次数减少而加快。   另外,使用 GetType 方法可於程序运行时得知泛型及其类型参数的实际类型,更可以运用反射编程。   允许对个别泛型的类型参数进行约束,包括以下几种形式(假设 C是泛型的类型参数, 是一般类、泛类,或是泛型的类型参数):T 是一个类。T 是一个值类型。T 具有无参数的公有建构方法。T 实现接口 I 。T 是 C ,或继承自 C 。

泛型的好处:
  泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。它允许程序员将一个实际的数据类型的规约延迟至泛型的实例被创建时才确定。泛型为开发者提供了一种高性能的编程方式,能够提高代码的重用性,并允许开发者编写非常优雅的解决方案。


摘自:http://baike.baidu.com/view/965887.htm --------------------编程问答-------------------- 高性能 类型安全 --------------------编程问答-------------------- 总之就是一句话:类型参数化 --------------------编程问答-------------------- 通俗一点讲,参数类型约束化,比如说

List<int> nums = new List<int>();
nums.Add(abc);//由于定义的时候定义了List元素为int,这里的abc也就只能强制为int类型的对象,如果abc定义是的string型,则编译的时候通不过。如:
/* 下面的程序会报错:
string abc = "123";
List<int> nums = new List<int>();
nums.Add(abc);
*/


这个主要是防止类型匹配,类型转换的时候可能出现异常而设置的,99%的时候都是用int型的值存放到list里面的,99%的时候不会出错,偶尔一次往list里面加了一个string型的或者其它类型的值,使用的时候可能会出错。所以泛型主要是用批强类型的
--------------------编程问答-------------------- 百度一下 --------------------编程问答--------------------
引用楼主 fei243451828 的回复:
麻烦各位的大侠给点学习资料,
谢谢


离散数学中的函数概念,泛型就是类型的函数映射,将类型作为参数,泛型计算的结果还是一个类型。 --------------------编程问答-------------------- 函数映射

就这么简单! --------------------编程问答-------------------- .Net泛型类的学习总结(1)
--------------------编程问答-------------------- 简单来说,比如说  public class Abc<S,R> 是什么意思呢?我们知道这里T、R是表示两个类型,设计者想告诉我们只要我们提供两个具体的类型来匹配S、R参数,它就给我们在产生新的类型。

因此,abc<int,int>跟abc<int,long>毫无关系,是两个新的类型。

abc<IList>跟abc<List<int>>也毫无关系,是两个新的类型。 --------------------编程问答--------------------
引用 6 楼 colorall 的回复:
总之就是一句话:类型参数化
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,