25.庫
語言如果沒有庫那它是沒什麼用的。C#以沒有核心庫著稱,但它利用了.NET框架的庫(它們中的一些就是用C#創建的)。本文著重於講述C#語言的特別之處,而不是.NET的,那應該另文說明。簡單地說,.NET庫包括豐富的線程、集合、XML、ADO+、ASP+、GDI+以及WinForm庫【譯注:現在這些+們多已變成了.NETJ】。有些庫是跨平台的,有些則是依賴於Windows的,請閱讀下一段關於平台支持的討論。
26.互用性
我認為把互用性分成三個部份論述是比較合適的:de,,並且對那些追求語言互用性、平台互用性和標准互用性。Java長於平台互用性,C#長於語言互用性。而在標准互用性方面,二者都各有長短。
(1) 語言互用性
和其它語言集成的能力只存在集成度和難易程度的區別。JVM和CLR都允許你用多種語言寫代碼,只要它們編譯成字節碼或IL碼即可。然而,.NET平台做了大量的工作—不僅僅是能夠把其它語言寫的代碼編譯成IL碼,它還使得多種語言可以自由共享和擴展彼此的庫。例如,Eiffel或Visual Basic程序員可以導入C#類,重載其虛方法;C#對象也可以使用Visual Basic方法(多態)。如果你懷疑的話,VB.NET已經被大幅升級,它已具有現代面向對象特性(付出了和VB6兼容性的損失)。
為.NET寫的語言一般插入Visual Studio.NET環境中,如果需要的話,可以使用同樣的RAD框架。這就克服了使用其它語言是“二等公民”的印象。
C#提供了P/Invoke【譯注:Platform Invocation Service,平台調用服務】,這比Java的JNI和C代碼交互起來要簡單得多(不需要dll)。這個特性很象J/direct,後者是微軟Visual J++的一個特性。
(2) 平台互用性
一般而言,這意味著操作系統互用性。但是在過去的幾年裡,internet浏覽器自身已經越來越象個平台了。
C#代碼運行在一個受控執行環境裡。這是使C#能夠運行在不同操作系統上的技術重要的一步。然而,一些.NET庫是基於Windows的,特別是WinForms庫,它依賴於多如牛毛的Windows API。有個從Windows API移植到Unix系統項目,但目前還沒有啟動,而且微軟也沒有明確的暗示要這麼做。
然而,微軟並沒有忽視平台互用性。.NET庫提供了編寫HTML/DHTML解決方案的擴展能力。對於可以用HTML/DHTML來實現的客戶端來說,C#/.NET是個不錯的選擇。對於跨平台的需要更為復雜的客戶界面的項目,Java是個好的選擇。Kylix—Delphi的一個版本,允許同樣的代碼既可以在Windows上也可以在Linux上編譯,或許將來也會成為跨平台解決方案的一個好的選擇。
(3) 標准互用性
幾乎所有標准,例如數據庫系統、圖形庫、internet協議和對象通訊標准如COM和CORBA,C#都可以訪問。由於微軟在制訂這些大多數標准上擁有權利或發揮了很大的作用,他們對這些標准的支持就處於一個很有利的位置。他們當然會因為商業上的動機(我沒有說他們是否公正)而提供較少的標准支持—對於和他們競爭的東西—比如CORBA(COM的競爭對手)和OpenGL(DirectX的競爭對手)。類似地,Sun的商業動機(再一次,我沒有說他們是否公正)意味著Java不會盡其所能地支持微軟的標准。
由於C#對象被實現為.NET對象,因此它自動暴露為COM對象。C#因此就既可以暴露COM對象也可以使用COM對象。這樣,就可以集成COM代碼和C#項目。.NET是一個有能力最終替代COM的框架—但是,已經有那麼多已部署的COM組件,我相信,不等.NET取代掉COM,它已經被下一波技術所取代了。但無論如何,希望.NET能有一個長久而有趣的歷史!J
27.結論
到此為止,我希望已給了你一個C#與Java、C++在概念上的比較。總的來說,比起Java,我相信C#提供了更好的表達力並且更適合編寫對性能有嚴格要求的代碼,它也同樣具有Java的優雅和簡單,這也是它們都比C++更具吸引力之處。
—全文完—