标题
msdn 访谈录之C#编程 rainbow(翻译)关键字 C#,JEFFREY RICHTER出处 http://www.mdsn.com[TR]
程序员天地
Robert Hess和Jeffrey Richter(著名的编程作家、专栏作家和咨询专家)的谈话。
ROBERT HESS: 欢迎回来。我们正要涉及到有关C#编程方面的问题。为了有助于我们理解这些问题,我邀请我的好朋友Jeffery Richter到这里来。Jeffery恰好是一名撰写了很多编程书籍的程序员,他最新的一本书为Programming Server Side Applications for Windows 2000。现在您也是一位咨询专家并且拥有自己的公司Wintellect,是吗?
JEFFREY RICHTER: Wintellect。
ROBERT HESS: 我猜您有一个网站吧?
JEFFREY RICHTER:有,Wintellect.com。我们专门从事培训、调试和广告。
ROBERT HESS: 好了,我了解到您最近做了不少有关C#的工作。
JEFFREY RICHTER: 是的,至今已一年有余了,我花了很大的精力一直专攻C#的编程。
ROBERT HESS:已经有一年了?我想我们才刚发布了C#。
JEFFREY RICHTER:是的,可我一直在圈内,在Microsoft的圈内,如果您愿意的话。我自己在第42楼安置了一个小小的办公室,并在那里从事C#的研究和有关.NET这方面的工作,到现在已经一年多了。
ROBERT HESS: 这样微软就会对您有所帮助,因为您并不是微软的职员……
JEFFREY RICHTER: 对。
ROBERT HESS:他们只是帮助您的把C#当成一种语言理解,那么您就可以写出更多象这样的书?
JEFFREY RICHTER:是的,他们希望我写更多的书,我得到了帮助,发现了bug,出席了类似的一些规范会议,并与人们交流,因此我觉得学到了很多的东西,而不只是写书,而事实在某种程度上也对C#做出了贡献。所以我可以告诉您,当最初开始时,我感兴趣的第一个东西就是这种新的语言,我将用它来写所有的代码,我知道这些代码是为可以预见的未来写的,让我们暂且不提。我具有非常深厚的C、C++背景,在阅读与C#相关文档和编程参考等资料一个星期之后,我就觉得已经相当精通C#了。并且在一周之内,我能够真正地写出一些有用的东西。
ROBERT HESS:仅仅一周之后。
JEFFREY RICHTER:是的,仅仅一周之后。因为它和C++非常类似,您知道,那里的大括号是相同的,返回值是相同的,参数是相同的,许多东西都是相同的。
ROBERT HESS:当继续使用对象、析构函数、构造函数、双冒号(::)等这些老掉牙的东西时,您似乎就要失去他们所拥有有的某些奇特的命名习惯,对吗?
JEFFREY RICHTER:是的是的,双冒号(::)都被点号(.)代替,箭头号(->)也被点号代替,这样就大大地简化了该语言。因而对于我来说实在是太容易啦,而且它还具有时效性,我仍不得不回过头去查看该语言参考资料,或许查找如何重载运算符,或者某些很平常的东西,要知道,当我编程时,极少做一些模糊不清的事。而现在大多数东西对我来说是再自然不过的了。事实上要解决的只是流程问题。
ROBERT HESS:既然您从事这项工作已经一年多了,那么您注意到了在这段时间里这种语言自身的演变吗?是否它们今天仍然与一年以前的十分相同?
JEFFREY RICHTER:我认为十分相同。但肯定存在着一些小技巧(tweak),在beta测试阶段确实存在着这些回应,存在着许多非确定性的析构函数(non deterministic destructor)、对象的析构(destruction of objects)等类似的东西。因此,基类库已经增加了一个iDisposable接口,我想它将会出现在beta 2.0版中,而不是在beta 1.0版中。同时C#已增加了一些新的语言结构,以帮助你获得与对象的确定性析构(deterministic destruction of objects)关系密切的东西。所以我要说,微软已经十分在意人们对该语言的评价了,并且他们还企图在其中加入新的东西以做出回应。我同样了解到,将来在1.0版之后,他们计划要增加泛型(generics),这有点类似C++中的模板,而我可以肯定,为了支持这些性能,C#就要发展。实际上当处于公共语言运行库(common language runtime)之中时,所有的语言都能用到泛型。
ROBERT HESS:因为它们是其中的一部份,又因其是公共语言运行库,所以它们有权使用所有的那些功能。那么您认为,C#作为一种语言总的来说究竟怎么样?
JEFFREY RICHTER:嗯,正如我所说的,C#与C++非常相似,所以我很快便熟悉了。它非常非常的干净,我要说它是非常干净的。我出身于C++背景,尤其是作为一个Windows C++程序员。ANSII拥有C++规范,微软为了展示Windows中的功能,就想在C++中保留一些技巧,并且使这些技巧看起来有点像C++中的贵族,可它们从来就没有真正地达到要求。而微软仍陆续增加__try、 __finally 和 __declspec等类似的东西。
ROBERT HESS:这就是您正在谈论的C#。
JEFFREY RICHTER:对,当然还有C++。因此,这种语言确实有点恐怖,过了一会儿您还是不会完全弄明白,就如const的用法,当声明一个指针或者是一个常量指针时,星号(*)究竟应放在它的前面,还是放在后面?您将无法断定这些修饰符到底应放在该行的那个位置。我总是需要查资料。因此在C#中,由于微软在设计时已经预先向ECMA(欧洲计算机制造商协会)做出了要求标准化的提议,所以它实在很干净,例如,没有什么是以下滑杠开始的。当然,由于本来在.NET runtime中就没有真正的指针,所以在您的代码中,从头到尾都不会能见到*号和&号等此类修饰符。这样当考虑它时,看起来干净,真的觉得很爽。
ROBERT HESS:难道您不觉得缺少什么吗?我的意思是,当我在用C编程时,喜欢运用指针解决问题,对指针重新分类,利用指针算法等老掉牙的东西,您就会从中获得极大的乐趣。难道您在用C#时就不怀念它吗?
JEFFREY RICHTER:嗯,我不得不承认,我自己总是有些喜新厌旧,但有时也有点念它。当然总的来说,有了C#和.NET framework,您就可以始终与其它语言进行交互操作(interoperate out),因而如果真的必须那样做的话,我便用C++而不是C#编程了。C#也确实提供了一种不安全的关键词(unsafe keyword),这样一来,您就可以创建一个方法并且说,这是不安全的,您有权使用指针并对内存进行直接操作。尽管如此,我还是从未亲自体验过。至于编码时获得的乐趣,.NET framework和基本OS类库提供了大量的特性,它们使编程变得有趣了。因此,当我不能保留虚拟内存并稀疏地提交,也不能在.NET framework中利用内存映象文件进行工作时,至少不能直接进行时,也可以通过交互操作完成,仍然还有其它类似serialization和web服务等东西,它们有利于创作出真正有价值的应用程序,真正强大而丰富的内涵。
ROBERT HESS:如今在您的培训班里,您正在教授和灌输这样的东西,您还在办C#的培训班吗?
JEFFREY RICHTER:是的,事实上刚好这一周,我给第一个C#编程班上课,当时班里有两个Visual Basic程序员,他们根本就不是面向对象的程序员,而我也没有真正地给他们介绍过C#语言,因为我把重点放在公共语言运行库和基类库方面,有关C#的内容想稍后再讲。但是,这两个VB程序员在上机实习时,对C#上手很快,几乎没有遇到什么麻烦,而且竟然能用其进行开发,效率