- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
泛型机制及泛型在C.NET中应用
泛型机制及泛型在C.NET中应用
[摘要] 泛型技术由于其代码简洁,运行效率高而在近年受到广泛关注,JAVA和.NET两大语言平台也给予了泛型技术充分的支持,并在.NET Framework 2.0 版本中引入泛型这一新技术,替代了旧的设计模式。该文通过对比、案例研究及实验,对基于C#.NET的泛型机制进行了论述,用深入浅出的案例验证了使用泛型的优越性和必要性,并对在三层结构的ASP.NET系统中如何使用泛型技术进行研究探讨。
[关键词] 泛型 泛型集合 .NET平台 C#语言
一、引言
泛型编程(Generics)最初诞生于C++中,实际上是一种通过将类型参数化实现代码重用的语言构造。由于其代码简洁,运行效率高而受到广泛关注。JAVA和.NET两大语言平台也给予了泛型技术充分的支持, Microsoft公司在其 .NET Framework 2.0 版本中引入了泛型这一新技术,随着.NET平台的广泛应用,程序员在进行程序设计时用泛型技术替代了旧的设计模式,高效的运行模式使泛型技术在近年发展迅速。下面笔者将对泛型机制、及在三层结构的ASP.NET系统中如何使用泛型技术进行研究探讨。
二、泛型机制
在泛型机制尚未出现在人们视野中之时,软件编程其实已经得到了很好的发展。那么为什么要用泛型?泛型的出现解决了什么问题?实际上,创建泛型机制很大程度上是为了解决类型安全问题。下面我们以C#中泛型的使用做为案例。
C# 是一个类型安全的语言,换而言之,就是在C#中,所有的变量都有一个定义了的类型;当将一个对象赋值给那个变量的时候,编译器检查这个赋值是否正确,如果有问题,将会给出错误信息。类型安全允许编译器捕获潜在的错误,而不是在程序运行时才发现,这种运行的机制是可信赖的,避免了在软件出售后才出现技术上的错误。但在C#中类型安全也会产生盲区:当使用集合时,由于ArrayList集合或哈希表中的元素是以Object基类类型存储,只要是基于Object的数据类型,无论哪一种类型的元素,均可存放到集合中,此时类型安全不起作用。例如,在.NET Framework 1.1中,使用ArrayList集合存储数据:
示例1
ArrayList Students = new ArrayList();//实例化ArrayList集合
Student stu1 = new Student(张小丽, 女);//实例化Student对象
Student stu2 = new Student(王刚, 男);
Student stu3 = new Student(赵前坤, 男);
students.Add(stu1);//将Student对象存入到ArrayList集合中
students.Add(stu2);
students.Add(stu3);
Teacher tch = new Teacher(张敏, 28, 语文);//实例化Teacher类的对象
students.Add(tch);//将Teacher类的对象存入ArrayList集合中
以上程序完成后,ArrayList集合中数据的状态如下:
图1ArrayList集合中的数据
由上图可见,由于C#中数据类型均基于基类类型,均可以存放到ArrayList集合中,不再进行类型安全检查,而且编译允许通过。但当取出数据时,必须逐一判断元素是具体哪一种类型,然后进行类型的强制转换(拆箱)才能取出:
示例2
foreach (Object stuo in students)
{
Student stu = (Student)stuo;
Console.WriteLine(stu.Name);
}
频繁的装箱拆箱操作,会使性能下降,并且容易产生误操作。例如图1上的案例,在集合students中存放在不同类型的元素,当进行遍历时,若不对元素数据类型加以判断,直接使用“Student stu = (Student)stuo;”,在程序运行到tch处就会抛出错误。而在ArrayList集合中存放的数据类型可能会有很多种,每取一次数据都要对所有数据类型进行判断,大大影响了程序运行的效率。为了避免频繁地进行装箱拆箱操作,并且编译器可以在程序运行之前捕获类型不匹配错误,那么我们需要舍弃ArrayList,设计特殊的集合,规定某种指定的类型才能装入其中,避免产生装箱和拆箱操作。例如,可以创建一个简单的线性链表,规定只允许指定类型的数据才能放入其中。下面我们举一个例子,现有一个Student类:
示例3
public class Studen
文档评论(0)