前言
.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); } } } |
| 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 |
| list<int> alist = new list<int>(); alist.add(3); alist.add(4); // alist.add(5.0); int total = 0; foreach(int val in alist) { total = total + val; } console.writeline("total is {0}", total); |
| //mylist.cs #region using directives using system; using system.collections.generic; using system.text; #endregion namespace clrsupportexample { public class mylist<t> { private static int objcount = 0; public mylist() {objcount++; } public int count { get {return objcount; } } } } //program.cs #region using directives using system; using system.collections.generic; using system.text; #endregion namespace clrsupportexample { class sampleclass {} class program { static void main(string[] args) { mylist<int> myintlist = new mylist<int>(); mylist<int> myintlist2 = new mylist<int>(); mylist<double> mydoublelist = new mylist<double>(); mylist<sampleclass> mysamplelist = new mylist<sampleclass>(); console.writeline(myintlist.count); console.writeline(myintlist2.count); console.writeline(mydoublelist.count); console.writeline(mysamplelist.count); console.writeline(new mylist<sampleclass>().count); console.readline(); } } } |
| 2 2 1 1 2 |
关键字 本文所属关键字相关 与本文相关文章分类 所有文章关键字导航源码编程相关Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏 操作系统/服务器相关Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器 标准 网站致力的规范 |