RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
Anders Hejlsberg谈C#、Java和C++中的泛型
  • 作者:xiaoxiao
  • 发表时间:2020-12-23 10:40
  • 来源:未知

原著:Bill Venners、Bruce Eckel  2004.2.26原文http://www.artima.com/intv/generics.html翻译:lover_P[人物介绍]    Anders Hejlsberg,微软著名工程师,带领他的小组设计了C#(读作:C-Sharp)程序设计语言。Hejlsberg第一次登上软件界历史舞台是在80年代早期,因为他为MS-DOS和CP/M设计了Pascal编译器。当时,还是一个小公司的Borland很快雇用了他,并买下了他的编译器,改称Turbo Pascal。在Borland,Hejlsberg继续开发Turbo Pascal,并最终带领他的小组设计了Turbo Pascal的替代品:Delphi。1996年,在进入Borland 13年后,Hejlsberg加入了微软。最初,他做Visual J++和Windows Fundatioin Classes(WFC)的架构师。随后,Hejlsberg成为C#的首席设计师和.NET Framework的关键参与者。目前,Anders Hejlsberg还在领导着C#程序设计语言的继续开发。    Bruce Eckel,Think in C++(C++编程思想)和Think in Java(Java编程思想)的作者。    Bill Venners,Artima.com的主编。[内容]泛型概述C#中的泛型C#泛型和java泛型的比较C#泛型和C++模板的比较C#泛型中的约束

泛型概述

    Bruce Eckel:您能对泛型做一个快速的介绍么?    Anders Hejlsberg:泛型其实就是能够向你的类型中加入类型参数的一种能力,也称作参数化的类型或参数多态性。最著名的例子就是List集合类。一个List是一个易于增长的数组。它有一个排序方法,你可以为 它做索引,等等。现在,如果没有参数化的类型,那么不论使用数组还是使用List都不是很好。如果你使用数组,你能获得强类型,因为你可以声明一个Customer类型的数组,但你失去了可增长性和那些方便的方法;如果你使用一个List,你能够得到所有的便利,但你失去了强类型。你难以说出一个List是什么(类型的)List,它只是一个Object的List【译注:“什么类型的List”指的是List存放的元素是什么类型的】。这会给你带来麻烦 ,因为类型只能在运行形时进行检查,也就是说在编译时不会进行类型检查。就算你硬要把一个Customer放进一个List并试图从中得到一个String,编译器也不会不高兴。在运行之前你根本无法发现它不能工作。同时,当你将简单类型【译注:指值类型】放入List时,还必须对它们进行装箱。正是由于这些问题,你不得不在List和数组之间徘徊,你经常要很痛苦地决定应该使用哪一个。    泛型的伟大之处在于你现在可以尽情地享受你的蛋糕了,因为你能够定义一个List (读作:List of T)【译注:中文可以说成“T类型的List”】。当你使用List时,你居然能够说出它是什么类型的List,并且你将获得强类型,编译器会为你检查它的类型。这些只是直觉上的好处,它还有其它许多优点。当然,你并不是只能将它用于List,Hastable、Dictionary(将键影射到值上的数据结构)——所有你想调用的都行。你可能想将String影射到Customer、将int影射到Order,在这些情况下你都能获得强类型。