是從 C 和 C++ 中派生出來的,因此具有 C++ 的功能,它又同 VB 一樣簡單。對于 web 開發 而言, C# 象 Java ,同時具有 Delphi 的一些優點。 Microso" name="description" />
C# MILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是從C和C++ 中派生出來的,因此具有C++的功能,它又同 VB一樣簡單。對于web開發而言,C#象 Java,同時具有Delphi的一些優點。Microsoft“號稱”C#是開發.NET框架應用程序的最好語言,它的前景如何,讓我們拭目以待。
C#閃亮登場。
先來看C#從Java里“盜用”了什么。C#比Java產生的晚,這為它的盜用創造了“天時”,所以C#可以站了Java這個前人的肩膀上。C#為什么“盜用”Java的技術呢?當然盜用的那一部分都是Java超出原先C++的地方(當然,這一部分對C++造成了巨大的市場沖擊),Microsoft又一次采取了“拿來主義”的手法,很好地利用了Java 的眾多特性,隆重推出了Windows平臺的C#這一新銳力量,實在是高明,C#的登場無疑是“閃亮”的。這些“盜用”包括:兩者都擯棄了C++中函數及其參數的const修飾,宏代換,全局變量和全局函數等許多華而不實的地方,指針沒了,另外也不需要自己釋放內存了,這將減少平常出錯的50%。當去掉指針和增加垃圾回收機制之后,奇跡就會發生,bug的出現量就注定會大大地減少,內存泄露也不會發生了。另外,英明神武的C#學會了Java的單根機制,也實現了“all are objects”了,拋棄了原先C++的多根機制和類之間的多重繼承,因為那兩個東東實在是太討厭了,搞的許多類在一起象個“網”一樣?,F在好了,統統地都是object的兒子或者孫子或者孫子的兒子的兒子的兒子了┈┈,大家都姓object了,object統一天下了。但是我不能不讓你“多重繼承”,所以好,我引入“接口”這個概念,我不讓你直接“連網”,我搞出個東東跟你們都聯系起來,跟你們接口,行使“通訊員”的功能,不然的話,為了實現多重繼承你這個類就可能有不只一個老爸。C#不忍心看著老一輩“指針崇拜者”掉眼淚,并沒有徹底地拋棄指針,C#允許我們在unsafe上下文中進行指針操作。
乖乖,怎么樣使代碼平臺無關呢?Java引入了一個編譯代碼中間層,叫做字節代碼,并使用一個虛擬抽象的機器,而不是一個真實的機器。當Java編譯器結束了一個源文件的編譯后,所得到的不是可以立即在一個給定平臺上運行的代碼,而是可以在任何真實的平臺上運行的字節代碼,唯一的條件就是這個平臺要理解和支持Java。而C#,當編譯源代碼為.exe文件后,啟動.exe時,CLR 將提取編譯器寫入代碼中的重要元數據。接著,一個叫做 Just-In-Time 編譯器的模塊將代碼映射到特定的 CPU中,開始實際的執行過程。這無疑也高明地盜用了Java虛擬機的概念。但是,Java是平臺無關的而C#在很大程度上只適合Windows操作系統,C#在跨平臺方面似乎更熱衷于XML Web Services互操作,而不是跨平臺編程。
當在c/c++定義a[10]這個數組時,元素a[10]甚至a[100]這個非法訪問它不會提示錯誤,但是你已經不知道a[100]跑到哪里去了(悟空啊,我早就告訴過你,不要亂扔東西嘛,砸到小朋友了就不好了,就是沒有砸到小朋友,砸到花花草草的也不好啊),你這樣的操作a[100]=1是十分危險的一個動作。數組的索引越界檢查,類型安全在Java中被提到了相當的高度,a[10]一旦出現,不客氣,你錯了,我拋出異常,我絕不姑息你,因為姑息就會養奸。C#學到了這一套了,而且更加厲害了,在異常處理方面,不管從內置支持,還是從執行效率來講,C#都較Java略勝一籌了。
原文轉自:http://www.anti-gravitydesign.com