技术讨论:C#与Java之争

来源:互联网 发布:学校舞会人鱼礼服知乎 编辑:程序博客网 时间:2024/04/27 21:52

Builder.com邀请了几个CNET的程序员Dan Seewer、Norris Shelton和Kevin Cobb来参加关于C#与Java的辩论。这两门语言以及它们各自的开发平台之间真的存在巨大的鸿沟吗?

Builder.com:好吧,现在谁准备到“我喜欢Java”一边,谁到“我喜欢C#”一边?

Kevin:首先必须说明的是我们都是Java的使用者。因此从三个Java使用者的观点出发来看C#,我们只是给出我们对C#的意见——好的或坏的。

Norris:我们可以证明我们的观点,它们的确是对的。C#与Java非常相像,它们之间的差别比起C#与C++来要小得多。如果Java中有某个东西,在C#中也会有相似的某个东西,反之亦然。

Dan:我想,微软的说词在于C++,以及他们对C++的发展。

Kevin:那我们能拿出什么呢?

Dan:对,我们能够拿出其它的什么来吸引和说服C++用户呢?

Kevin:我学习C#过程中它对我的打击是,加入其中的是一些浮华的东西,只是吸引了人们的眼球,却没有真正使它成为一门更好的语言。也许这样说有些不公……

Dan:不,我想的却是这样。

Norris:我想,他们有了C++,然后又有了Java。于是C++的某些特性被拿掉以使Java更简。单。

Dan:很对。如果C++的爱好者不喜欢这样,他们会把这种改变视为障碍。

Norris:应该说这对于Java的使用者并不成立,因为如果一开始就使用Java,你就不会感到任何的不便。

Dan:对

Norris:但是那些并不适用Java的人却看得到所有的限制。如果我是一个C++程序员,而且我并不想学习Java,于是我开始学习C#。微软为C#添加了许多内容,但是在某些情况下,他们加入的只会变得更复杂。比如索引器——它并没有使你得到新的东西。Java程序员对此不会感到损失,但是我相信这会增加程序的复杂性。

Dan:对于运算符重载也是同一个道理。

Norris:是的。
 
Dan:你将运算符重载和以前弄混了,那可是C++的重要组成部分。在用C++编程时我用过它,我总是觉得它使得事情变得更复杂了,而其本身并不需要这样复杂。比如对于加号或减号,你必须注意变量是什么类型。“那些变量是对象吗?”它们是对象。那就继续找真正的方法,重载即在此发生。但如果并没有重载,那你就搁浅了。

Norris:是的。这有一个此问题的例子:我正在阅读Programming C#(Second Edition),里面说到:“如果你在C#中这样做,而你想别人能在VB中使用这个库,你就得用其它的方法,其效果是相同的。”那是因为VB,甚至新的VB.NET并不支持运算符重载。如果真的有人要使用你的库,而VB.NET并不会支持,那可真是一个问题。

Builder.com:所以,你们说微软向C#中加入了与VB.NET以及其它.NET语言不兼容的特性?

Norris:是的。它们好像都遵循公共语言运行时(CLR),但是C#却有它自己的运算符重载,在VB.NET中又不能这样做。你能够使用那些对象是因为它在CLR中,VB.NET允许你这么做,但是你在这儿却无法使用那个库,那个功能,它不会起作用。

Dan:你的C#函数是这样的吗?

Norris:噢,是的。

Dan:我正在读.NET Development for Java Programmers,里面有一章比较了Java和C#,但却没有涵盖这样与VB有关的问题。

Builder.com:既然你们都是Java程序员。那你们为什么要学习C#呢?

Norris:这并不是因为我们是Java程序员,而是因为我们是开曼群岛路易斯维尔的Java程序员,在路易斯维尔可没有那么多Java职位。

[笑]

Builder.com:但是除了仅仅因为“其他人都用它”和“工作的需要”以外,应该有一个合理的解释。

Kevin:这取决于我们看待它的方式,因为我们是Web程序员。我们已经选择了这行。因此我对学习与Web开发有关的任何工具都感兴趣,包括C#、.NET、Java、JSP等等。如果我离开这里,我希望到另一个Web开发职位上,因此我要使自己更有竞争力,那就至少要熟悉C#,.NET和其他的东西。

原创粉丝点击