翻譯整理 毛竹 南海
C#介紹
最近微軟宣布了它的最新編程語言C#,這是一種面向對象的編程語言,它將作為Visual Studio中的一部分推出。C#(發音為“C-Sharp”)既保持了C++中熟悉的語法,並且還包含了大量的高效代碼和面向對象特性。據微軟產品經理透露,C#語言將在保持C/C++靈活性的基礎上為程序員帶來更高效的RAD開發方式。它不僅能用於WEB服務程序的開發,並且還能開發強大的系統級程序。
微軟還沒有正式宣布這一新語言技術,該技術將以測試形式出現在微軟打算在7月中旬在專業開發會議上分發的Visual Studio 7中。Visual Studio 7將於明年某個時候正式發售。
Layman介紹說C#包含使XML編程更為輕松的技術。微軟將使它的下一代工具軟件、操作系統和應用支持XML技術。
新的編程語言還將包含虛擬機設備。微軟官員已經公開表示C#技術和該公司去年開發的 Java競爭技術Cool沒有關聯。微軟官員拒絕回答是否計劃在Visual Studio 7中提供微軟設計的視窗版Java Visual J++的某個版本。
C#的特性
現在,微軟仍在一邊繼續反駁其競爭對手Sun控告它改變了Java語言的訴訟,一邊在對美國反壟斷指控頑抗到底,但與此同時,微軟的天才程序員們也在技術上進行著一場補救的措施。那就是他們已經開發出來的C#語言,這是一種非常類似於Java的語言,微軟深知即便是微軟陣營中也有著相當一部分人喜歡Java語言,所以這次干脆就用C#來滿足他們的願望,這是一種非常完美的語言,適用於各種操作系統,並且與Windows緊密地結合在一起。
微軟表示這種新的程序設計語言並不針對Java,但它將是C++的革新。而這正是Java所追求的兩個主要目標之一(另一目標當然就是可移植性)。微軟一直夢想著能開發出能與Java在Windows NT系統上抗衡的語言。C#的自動內存管理以及和Java一樣都使用的C語言語法,似乎讓這個理想成為現實。
微軟稱C#是由C和C++派生而來的一種“簡單、流行、面向對象、類型安全”的程序設計語言,C#意在綜合Visual Basic的高效率和C++的強大功能。但這種說法是否准確呢?由於C#的結構很像Visual Basic的ActiveX,它顯然是沖著RAD開發者來的。但同時,“C#提供了C++的強大功能”這種說法也稍嫌誇張,將來很可能變成空頭支票。
對某一對象接口的更新,微軟稱之為“繼承”,當然“繼承”是就“對象”而言的。但是,雖然“對象”這個詞我們經常碰到,卻很少有人真正理解了它的含義。微軟的用戶,甚至它自己的員工都經常把“對象”和“接口”弄混。所以微軟干脆就用接口來定義各種對象,結果導致了“面向對象編程”(OOP)被微軟弄得亂七八糟。現在,微軟又在大踏步地前進了(雖然它內心還是很小心),它把它建立在接口基礎上的“對象”集成到了開發工具裡。不過它走得實在過了頭,它甚至把對另一對象接口的更新稱之為“繼承”。
這個“繼承”給程序員們帶來的好處就是語言無關——只要接口維持其兼容性,用Visual Basic寫成的對象在C#和C++中也可以良好地運行。但此特性是以真正的OOP技術和平台的可移植性為代價的。每個對象都被編譯和注冊到Windows子系統,只要你能訪問這個子系統,你就能訪問這個對象。來吧!歡迎來到.Net和NGWS的世界!——Windows平台從來沒有完完全全地讓人產生這樣完整的依賴性。他們的動機當然要遭到全世界對微軟有偏見的人的懷疑,當然,完全依靠此技術的C#也不例外。
事實上,C#將是完全依靠Windows的最完美的產物。那些困繞Java SDK, MFC 和SET的數據庫已成為過去。你想放入C#的任何東西(無論何種語言),只要在Windows的.Net子系統下建立和包裝的都可以使用Windows的運行庫。
用MSIL進入.Net
當人們訪問Usenet或一些新聞組時,會有一些諸如新語言和平台有效性之類的問題。什麼時間和努力能解決這些問題呢?當然,如沒有牢固的事實和有說服力的證據,即使是最有幫助的響應者,權威機構也會對他的斷言持保留意見。我沒有參加今年的專業開發者會議(PDC),因此我的發現都是基於那些與會者的反饋。
人們對微軟過去幾周的大肆宣傳,最基本的錯誤理解就是C#只是Visual C++的改進版本。完全不是這麼回事。C#和Java沒有直接聯系。它的特征設定是從Java獲得的靈感。它的語法同Java一樣,源自C和C++,但它的執行是完全新的,只依靠.Net結構。
C#也並非字節碼(bytecode)。微軟一位員工羅伯特.舒密特詳細描述道:“C#編譯程序產生的是‘微軟中間語言’(MSIL)……但虛擬機或其他類似的技術則不能用於解釋這種中間語言(IL)。相反地,每當應用程序載入或JIT編譯程序需要編譯它時,IL就會被轉換成本地代碼。一旦這種轉換完成,可以執行的代碼實際上是本地代碼。