深入浅出.NET泛型编程
日期:2007年12月9日 作者: 查看:[大字体 中字体 小字体]-
前言
.NET 2.0中泛型的出现是一个令人激动的特征。但是,什么是泛型?你需要它们吗?你会在自己的应用软件中使用它们?在本文中,我们将回答这些问题并细致地分析泛型的使用,能力及其局限性。
类型安全
.NET中的许多语言如C#,C++和VB.NET(选项strict为on)都是强类型语言。作为一个程序员,当你使用这些语言时,总会期望编译器进行类型安全的检查。例如,如果你把对一个Book类型的引用转换成一个Vehicle型的引用,编译器将告诉你这样的cast是无效的。
然而,当谈到.NET 1.0和1.1中的集合时,它们是无助于类型安全的。请考虑一个ArrayList的例子,它拥有一个对象集合--这允许你把任何类型的对象放于该ArrayList中。让我们看一下例1中的代码。
例1.缺乏类型安全的ArrayList
using System;
using System.Collections;
namespace TestApp
{
class Test
{
[STAThread]
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(3);
list.Add(4);
//list.Add(5.0);
int total = 0;
foreach(int val in list)
{
total = total + val;
}
Console.WriteLine("Total is {0}", total);
}
}
}
本例中,我们建立了一个ArrayList的实例,并把3和4添加给它。然后我循环遍历该ArrayList,从中取出整型值然后把它们相加。这个程序将产生结果"Total is 7"。现在,如果我注释掉下面这句:
list.Add(5.0);
程序将产生如下的运行时刻异常:
Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
AtTestApp.Test.Main(String[]args)in :\workarea\testapp\class1.cs:line 17
哪里出错了呢?记住ArrayList拥有一个集合的对象。当你把3加到ArrayList上时,你已把值3装箱了。当你循环该列表时,你是把元素拆箱成int型。然而,当你添加值5.0时,你在装箱一个double型值。在第17行,那个double值被拆箱成一个int型。这就是失败的原因。
注意:上面的实例,如果是用VB.NET书写的话,是不会失败的。原因在于,VB.NET不使用装箱机制,它激活一个把该double转换成整型的方法。但是,如果ArrayList中的值是不能转换成整型的,VB.NET代码还会失败。
作为一个习惯于使用语言提供的类型安全的程序员,你希望这样的问题在编译期间浮出水面,而不是在运行时刻。这正是泛型产生的原因。
3. 什么是泛型?
泛型允许你在编译时间实现类型安全。它们允许你创建一个数据结构而不限于一特定的数据类型。然而,当使用该数据结构时,编译器保证它使用的类型与类型安全是相一致的。泛型提供了类型安全,但是没有造成任何性能损失和代码臃肿。在这方面,它们很类似于C++中的模板,不过它们在实现上是很不同的。
4. 使用泛型集合
.NET 2.0的System.Collections.Generics 命名空间包含了泛型集合定义。各种不同的集合/容器类都被"参数化"了。为使用它们,只需简单地指定参数化的类型即可。请看例2: - [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页
-
- 深入浅出.NET泛型编程 相关文章:
- ·冰点还原精灵 图文教程
- ·C语言教程第六章:指针
- ·远程破OICQ密码给工具QQExplorer ver 1.25介绍
- ·施工与工程组织方案
- ·“黑客”教你如何远程控制计算机
- ·Java编写的计算器程序及源代码(1)
- ·用C#写计算器程序
- ·综合布线系统工程设计参考大全
- ·Excel XP函数实用教程精华集
- ·SOS - SOS.exe - 进程信息
- 深入浅出.NET泛型编程 相关软件
- ·Photoshop视频实例教程系列电子书 V1.0
- ·大师之路Photoshop教程 V2.0
- ·《仙剑奇侠传2》全过程存档
- ·极品五笔教程 V2007
- ·热带鱼水族箱屏幕保护程序 V2.0 汉化版
- ·建筑工程、安装工程施工技术交底大师 V10.5
- ·C语言编程宝典之一
- ·《雅奇MIS》可视化自动编程系统 V10.0
- ·3D Max教程 V1.1
- ·韩国语口教程
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:为.NET调整你的文件工作方案
下一篇:多条件数据库查询的优化方法
精品推荐
热点TOP10
- ·深入浅出.NET泛型编程
- ·如何为嵌入式开发建立交叉编译环境
- ·SVG与UML图详解
- ·使用ADS1.2进行嵌入式软件开发
- ·Linux 系统内核的调试
- ·UML类图详解(1)
- ·统一建模语言(UML)的现状及发展
- ·微软WCF给SOA带来的影响
- ·.NET 数据访问架构指南
- ·利用UML类图设计Java应用程序详解(1)
- ·质量管理新七种工具简介(1)
- ·Tomcat中用web.xml控制Web应用详解
- ·VC中利用多线程技术实现线程之间的通信
- ·WinCE嵌入式开发程序入门
- ·用WPF构建强大的用户体验
- ·ISO9000:2000 质量管理八大原则(1)
- ·掀起你的盖头来:WPF开发简介
- ·Apache APR可移植运行库简介(1)
- ·团队协作关键做好三件事&一个项目经理的一些个人体会
- ·升级到SQL Server 2005 的10大理由
