WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院软件开发C语言 C#就是Java只不过差了一点点 阅读

C#就是Java只不过差了一点点

 2004-01-05 12:45:13 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺璇茬箲濮樸劑鍩€椤掍礁鍤柛鎾跺枎椤繐煤椤忓嫬鐎銈嗘礀閹冲酣宕滄导瀛樷拺闂侇偆鍋涢懟顖涙櫠椤斿墽纾煎璺猴功缁夎櫣鈧鍠栭…閿嬩繆濮濆矈妲烽梺绋款儐閹瑰洤螞閸愩劉妲堟繛鍡楃箲濞堟﹢姊绘担椋庝覆缂傚秮鍋撴繛瀛樼矤閸撶喖宕洪埀顒併亜閹烘垵鈧綊寮抽鍕厱閻庯綆浜烽煬顒傗偓瑙勬磻閸楀啿顕i崐鐕佹Ь闂佸搫妫寸粻鎾诲蓟閵娾晜鍋嗛柛灞剧☉椤忥拷
核心提示:C#和java都是很不错的语言,他们通过类似的方式达到了类似的目的,C#就是Java只不过差了一点点,尽管C#比Java多出来一些和句法相关的东西,例如foreach关键字和一些更加让人高兴的扩展/实现架构,它在某些方面很明显的要更差,在这两个非常类似的语言之间作选择的时候,不幸的是,这些改进的光芒被削弱的东西掩盖掉了

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。

Tags:就是 Java 只不过

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接