c#就是java只但是差了一点点_c#教程

2008-02-23 05:44:12来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

C#和Java都是很不错的语言。他们通过类似的方式达到了类似的目的,尽管C#比Java多出来一些和句法相关的东西,例如foreach关键字和一些更加让人高兴的扩展/实现架构。不幸的是,这些改进的光芒被削弱的东西掩盖掉了。在本文里,我将比较两种语言,并尽量避免深入到JVM和CLR层。

Java:无可争辩地具备C 任何的精华
在比较Java和C#的时候,您不可能不注意到他们诸多的相似之处,这在某种程度上要归结于他们一起的来源:C和C 。但是,当Gosling和他的同事们坐下来创造Java的时候,他们不但吸取了C 的能力,而且更重要的是,他们减掉了一些无用特性,后者让C 更容易出错误而且更难学习。C#的设计者加入了很多C 的特性,而Java也加入了这些特性,但是C#却没有去掉C 的最糟糕的一些特性。其结果就是这样一门语言,他仍然为任何人提供了任何的特性,但其结局是内部冲突不断,而且过于复杂。

散漫的句法缺陷
最容易找出的错误是流控制和句法。C#提供了goto command,将其作为更改程式执行点的机制。自从Edsger W. Dijkstra在1968年出版了他的《关于Go to陈述式害处的考虑(Go To Statement Considered Harmful)》。Goto语句导致代码难以调试,而且很难被测试工具处理。

在另一种不同的情况下,操作符过载同样也有很大问题,只但是层次不相同罢了。当“ ”根据操作数的类型而代表任何东西的时候,代码的功能就不再透明,难以预料的副作用就会发生。

C#在安全上的削弱
C#有一个用于将代码区域标示为不安全的简单机制。在这些不安全的区域里,Java连同后来的C#安排到位了一些安全措施,用以防止程式员直接修改内存位置,连同使用点运算,但是这些措施是值得怀疑的。在使用具备垃圾清理功能的高级语言时,假如下到内存地址这一层,就会把对象/内存之间有意作出分离弄混。错误就会容易出现,调试成了恶梦,缓冲区溢出再次抬头,C和C 里著名的安全漏洞再次现身。

C#还允许对主机系统上本机库的简单访问。这个和非.NET对象相结合的访问同Java本机接口(JNI)所提供的功能类似,但是他更加危险。JNI被设计用来小心地限制Java代码连同本机代码同已定义好的接口之间的交互操作,.NET使得调用本机对象文档变得极其简单,结果导致研发人员在做这的时候,无法意识到他们在这一过程中把平台的可移植性也扔出了窗外。

SOAP的集成
C#,及其更大的扩展.NET,已同SOAP Web服务紧密地集成在一起。SOAP是使用XML指定参数和结果值来进行远程过程调用的好标准,但是他并不是唯一的方式。利用用于Web服务的外部库能够允许Java研发人员轻易地更改其Web服务的风格,使其成为SOAP、XML-RPC,或什么还没有发明的东西。当然,C#的研发人员总是能够选择将外部库用于SOAP的Web服务,但是由SOAP标准的紧密集成所造成的限制要比他能够做的东西更多。


任何者的恐慌
C#里最令人恐慌的特性可能就是其任何者了。微软已为将C#和.NET用于非Windows平台进行了精心的展示,但是这在很大程度上还只是作秀。其用于非Windows平台的CLR是问题多多,错误多多。他通过ECMA标准化过程来运行C#——这一步连Sun也不敢在Java上迈出。其担心来自于微软对此可能封锁的程度,假如他愿意的话。微软已申请了一个专利,以排斥他人编写第三方的CRL,例如Mono计划。假如微软决定对免费的C#和.NET社区施压,他就有能力拿票子和法律的大棒把其研发活动赶回到Win32平台——当然这也不是他想看到的情况。

Java语言则相反,不是ECMA标准的,真可惜Sun没有遵从这一标准。但是,他是能够实现的,而且没有专利的阻碍,其虚拟机和核心类库都有来自第三方的开放和封闭源代码的实现。C#看起来是免费的,其实不然,而Java看起来限制很多,但是他能够依据法律通过免费的途径来实现。

最后,我从来都没有想到我会说这个,但是Java具备更好工具的支持,即使是在考虑到集成研发环境(IDE)的情况下。Visual Studio .NET是个很不错的IDE。他代表了多年的努力,而且特性很丰富。但是,Eclipse IDE包括了对Java的支持,他在稳定性、易用性和所提供的特性上超过了Visual Studio。IBM对Eclipse的贡献举足轻重,而且假如您信奉原来的软件格言“创建一个扔掉的(Build one to throw away)”,那么您能够把Visual Age作为第一个(被抛弃掉了的)尝试。对于使用C#的研发人员来说幸运的是,Eclipse的.NET版本正在研发中。

不是那么差,但是还不是Java
客观一点评价,C#里并没有什么很恐怖的东西。他没有Visual Basic里的那些很恐怖的东西,而且他事实上也没有继承像C里的一些东西,而这些东西会让研发人员开枪却打中自己脚。但是,底线是,C#并没有做很多东西,假如有任何东西比Java更好的话。他在某些方面很明显的要更差。在这两个很类似的语言之间作选择的时候,请选择稍稍更好且经历风雨的那个:Java


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: c# enum设计和使用的相关技巧 _c#应用

下一篇: 在c#中利用sharpziplib进行文档的压缩和解压缩_c#应用