C#是微軟(ruan)公(gong)司(si)發(fa)布的(de)(de)(de)(de)一(yi)種由C和C++衍生出來的(de)(de)(de)(de)面(mian)向(xiang)對象的(de)(de)(de)(de)編程(cheng)語(yu)(yu)言、運(yun)(yun)行于.NET Framework和.NET Core(完全開源,跨平臺(tai))之上的(de)(de)(de)(de)高(gao)級程(cheng)序(xu)設計語(yu)(yu)言。并定于在(zai)微軟(ruan)職業(ye)開發(fa)者論壇(PDC)上登臺(tai)亮相(xiang)。C#是微軟(ruan)公(gong)司(si)研究(jiu)員(yuan)Anders Hejlsberg的(de)(de)(de)(de)最新成果。C#看起來與(yu)Java有(you)著驚(jing)人(ren)的(de)(de)(de)(de)相(xiang)似;它包括(kuo)了諸如單一(yi)繼承、接口、與(yu)Java幾乎(hu)同樣的(de)(de)(de)(de)語(yu)(yu)法(fa)和編譯成中間代碼再(zai)運(yun)(yun)行的(de)(de)(de)(de)過程(cheng)。但是C#與(yu)Java有(you)著明顯(xian)的(de)(de)(de)(de)不(bu)同,它借鑒了Delphi的(de)(de)(de)(de)一(yi)個特(te)點,與(yu)COM(組件(jian)對象模型(xing))是直接集成的(de)(de)(de)(de),而且它是微軟(ruan)公(gong)司(si).NET windows網絡框架的(de)(de)(de)(de)主(zhu)角。
C#是由C和(he)C++衍生出來的(de)(de)(de)(de)一種安全的(de)(de)(de)(de)、穩定的(de)(de)(de)(de)、簡單的(de)(de)(de)(de)、優雅的(de)(de)(de)(de)面向對(dui)象編程(cheng)語(yu)言(yan)。它(ta)在繼承(cheng)C和(he)C++強大(da)功能(neng)(neng)的(de)(de)(de)(de)同時去掉了一些(xie)它(ta)們(men)的(de)(de)(de)(de)復雜(za)特性(例(li)如(ru)沒有(you)宏以(yi)及(ji)不允許多重繼承(cheng))。C#綜合了VB簡單的(de)(de)(de)(de)可視化操作(zuo)和(he)C++的(de)(de)(de)(de)高(gao)運(yun)行效率(lv),以(yi)其(qi)強大(da)的(de)(de)(de)(de)操作(zuo)能(neng)(neng)力、優雅的(de)(de)(de)(de)語(yu)法風格、創新的(de)(de)(de)(de)語(yu)言(yan)特性和(he)便捷的(de)(de)(de)(de)面向組(zu)件(jian)編程(cheng)的(de)(de)(de)(de)支持成為.NET開(kai)發的(de)(de)(de)(de)首選語(yu)言(yan)。
C#是(shi)面向對象的(de)編(bian)程(cheng)語言。它使得程(cheng)序員可以快速地(di)編(bian)寫各種(zhong)基(ji)于MICROSOFT.NET平臺的(de)應用程(cheng)序,MICROSOFT .NET提供(gong)了一系列的(de)工具和服務來最大程(cheng)度地(di)開發利(li)用計算(suan)與通訊領域。
C#使得C++程序(xu)員可以(yi)高效(xiao)的(de)(de)開(kai)發程序(xu),且因可調用由C/C++編寫的(de)(de)本(ben)機原(yuan)生函數,而(er)絕不損失C/C++原(yuan)有(you)的(de)(de)強(qiang)大的(de)(de)功能。因為這種繼承(cheng)關系,C#與C/C++具有(you)極大的(de)(de)相似(si)(si)性,熟悉類似(si)(si)語(yu)言的(de)(de)開(kai)發者可以(yi)很快(kuai)的(de)(de)轉向C#。
C#是(shi)微(wei)軟公司(si)(si)在2000年6月發布的(de)(de)一種(zhong)新(xin)的(de)(de)編(bian)程語言,主要由(you)安(an)德斯(si)·海爾斯(si)伯格(Anders Hejlsberg)主持(chi)開發,它(ta)是(shi)第一個(ge)面向組(zu)件的(de)(de)編(bian)程語言,其源(yuan)碼(ma)會(hui)編(bian)譯(yi)成(cheng)msil再運行。它(ta)借鑒了Delphi的(de)(de)一個(ge)特(te)點,與COM(組(zu)件對(dui)象(xiang)模型)是(shi)直接集成(cheng)的(de)(de),并且(qie)新(xin)增了許(xu)多功能及(ji)語法,而且(qie)它(ta)是(shi)微(wei)軟公司(si)(si).NET windows網絡框架的(de)(de)主角。
C#讀作“C Sharp”。最初它有個(ge)(ge)更酷的(de)(de)名(ming)字,叫做COOL。微軟從1998年(nian)12月(yue)開(kai)始了(le)COOL項(xiang)目,直(zhi)到2000年(nian)2月(yue),COOL被正(zheng)式更名(ming)為C#。在(zai)1998年(nian),Delphi語(yu)言的(de)(de)設計者Hejlsberg帶(dai)領(ling)著Microsoft公(gong)司(si)的(de)(de)開(kai)發團隊,開(kai)始了(le)第一(yi)個(ge)(ge)版(ban)本C#語(yu)言的(de)(de)設計。在(zai)2000年(nian)9月(yue),國際信(xin)息(xi)和通信(xin)系統(tong)標準(zhun)化組織為C#語(yu)言定義了(le)一(yi)個(ge)(ge)Microsoft公(gong)司(si)建議的(de)(de)標準(zhun)。最終C#語(yu)言在(zai)2001年(nian)得以正(zheng)式發布(bu)。
原(yuan)Borland公司的首席研發(fa)設(she)計師安德斯(si)·海爾斯(si)伯格(Anders Hejlsberg)在(zai)微軟開發(fa)了Visual J++ 1.0,很快的Visual J++由1.1版(ban)本升級到(dao)6.0版(ban)。SUN公司認為Visual J++違反了Java開發(fa)平臺的中立(li)性,對微軟提出了訴訟。2000年6月26日(ri)微軟在(zai)奧蘭多舉行的“職業開發(fa)人(ren)員技術大(da)會”(PDC 2000)上,發(fa)表新的語言C#。C#語言取代了Visual J++,語言本身深受 Java、C和(he)C++的影響。
C#是(shi)(shi)兼顧系統(tong)開(kai)發和(he)應用開(kai)發的(de)(de)最佳實用語(yu)言,并且很有可(ke)能成(cheng)為編程語(yu)言歷史(shi)上的(de)(de)第一個“全能”型語(yu)言。看(kan)過這篇簡史(shi),不要把C#看(kan)成(cheng)年(nian)輕后(hou)生了——只要是(shi)(shi)“馬(ma)拉多納”,就早晚當“球(qiu)王”。C#1.0,純粹(cui)的(de)(de)面(mian)向對象。
1998年底,微(wei)軟正在忙于新一(yi)代COM的設計工作(zuo),COM一(yi)直(zhi)是(shi)組(zu)件(jian)化開(kai)發中(zhong)(zhong)非(fei)常成(cheng)功的一(yi)種(zhong)技術;但(dan)由于它僅提供了(le)二進制層(ceng)面上的統(tong)一(yi),因此無法將類型(xing)信息和用于支(zhi)持基礎平臺和開(kai)發工具(ju)的信息放(fang)到組(zu)件(jian)中(zhong)(zhong),Java逐步走(zou)向(xiang)成(cheng)熟。微(wei)軟學習Java的做法,將虛擬機(ji)的概(gai)念(nian)引入到了(le)COM領域;同(tong)時,微(wei)軟提出了(le)“元數據”的概(gai)念(nian),用于描述組(zu)件(jian)的類型(xing)信息和工具(ju)支(zhi)持信息,并決定將其放(fang)入到組(zu)件(jian)當中(zhong)(zhong)。
1998年12月(yue),微(wei)軟啟動了(le)一(yi)個全新的(de)(de)語(yu)言(yan)項目(mu)——COOL,這是一(yi)款專門為CLR設計的(de)(de)純(chun)面(mian)向對(dui)象的(de)(de)語(yu)言(yan),也正是本(ben)文的(de)(de)主角——C#的(de)(de)前身。
1999年(nian)7月(yue)份,微軟(ruan)完成(cheng)了COOL語(yu)言的一(yi)個內部版本。
2000年(nian)(nian)2月(yue)份,微(wei)軟(ruan)才正式將COOL語(yu)言更名(ming)為C#。據說(shuo)起這個名(ming)字(zi)(zi)是因(yin)為C#開發(fa)(fa)小組的(de)人(ren)很討厭搜(sou)索引(yin)(yin)擎,因(yin)此把大部(bu)分搜(sou)索引(yin)(yin)擎無法識(shi)別的(de)“#”字(zi)(zi)符作為該語(yu)言名(ming)字(zi)(zi)的(de)一(yi)(yi)部(bu)分;還有(you)一(yi)(yi)種說(shuo)法是在音(yin)樂當(dang)中“#”是升(sheng)調(diao)記號,表達了(le)微(wei)軟(ruan)希望它(ta)在C的(de)基(ji)礎上(shang)更上(shang)一(yi)(yi)層樓的(de)美(mei)好愿(yuan)望——當(dang)然這些都只是傳(chuan)說(shuo),無從(cong)考證。又是歷(li)經了(le)一(yi)(yi)系(xi)列(lie)的(de)修改,微(wei)軟(ruan)終于(yu)在2000年(nian)(nian)7月(yue)發(fa)(fa)布了(le)C#語(yu)言的(de)第一(yi)(yi)個預覽版(ban)。
C#旨在設計成為(wei)一種(zhong)“簡(jian)單(dan)、現代、通用”,以及面向(xiang)對象的(de)程序(xu)設計語(yu)(yu)言,此(ci)種(zhong)語(yu)(yu)言的(de)實現,應(ying)提供對于以下軟(ruan)(ruan)件(jian)工(gong)程要素的(de)支持:強(qiang)類(lei)型檢(jian)查(cha)、數(shu)組維(wei)度檢(jian)查(cha)、未初始化的(de)變量(liang)引用檢(jian)測、自動垃圾收集(Garbage Collection,指(zhi)一種(zhong)自動內(nei)存釋放技術)。軟(ruan)(ruan)件(jian)必須(xu)做到強(qiang)大、持久,并(bing)具有較強(qiang)的(de)編程生產(chan)力。此(ci)種(zhong)語(yu)(yu)言為(wei)在分布式(shi)環境(jing)中的(de)開發提供適用的(de)組件(jian)開發應(ying)用。
為(wei)使程序(xu)員(yuan)容易遷(qian)移(yi)(yi)到這種(zhong)語言,源(yuan)代(dai)碼的(de)(de)(de)可(ke)移(yi)(yi)植性(xing)十分(fen)重要,尤其是(shi)對(dui)(dui)于那(nei)些(xie)已熟悉(xi)C和C++的(de)(de)(de)程序(xu)員(yuan)而言。對(dui)(dui)國際化(hua)的(de)(de)(de)支(zhi)持(chi)非(fei)常重要。C#適合為(wei)獨立和嵌入式(shi)的(de)(de)(de)系(xi)統(tong)編(bian)寫程序(xu),從使用復雜操(cao)作系(xi)統(tong)的(de)(de)(de)大(da)型(xing)系(xi)統(tong)到特定(ding)應用的(de)(de)(de)小型(xing)系(xi)統(tong)均適用。
.NET是一(yi)個開發平臺(tai),而C#是一(yi)種在.NET開發平臺(tai)上使用的(de)編(bian)程語(yu)言,目前(qian)能在.NET平臺(tai)上使用的(de)開發語(yu)言很多,例如Visual Basic.NET、Python、J#、Visual C++.NET等。但在.NET平臺(tai)上使用最(zui)多的(de)是C#語(yu)言。
.NET框架的(de)(de)目的(de)(de)是便于開發(fa)人(ren)員容易(yi)地(di)建立Web應(ying)用(yong)程序和Web服(fu)務(wu),使得Internet上的(de)(de)各應(ying)用(yong)程序之(zhi)間可以使用(yong) Web 服(fu)務(wu)進行溝通。
.NET框架由三部分組(zu)成。執行(xing)環境稱為(wei)CLR(Common Language Runtime,公共語言運行(xing)庫)。CLR在(zai)運行(xing)時管理(li)程序(xu)的執行(xing),包括:內存管理(li)和垃圾收集;代碼安(an)全(quan)驗證;代碼執行(xing)、線程管理(li)和異常處理(li)。BCL(Base Class Library,基類庫)是.NET框架使(shi)用的一個大的類庫,而且也可以在(zai)你的程序(xu)中使(shi)用。
類:一(yi)個(ge)基本(ben)的(de)(de)C#類中包含(han)數據成員(yuan)、屬(shu)性、構(gou)造(zao)器(qi)和方法。屬(shu)性可以(yi)是(shi)靜(jing)態或實例成員(yuan)。在C#中類的(de)(de)聲明與C++和Java很相似。但是(shi),不(bu)像(xiang)C++,C#結構(gou)體(ti)(ti)與類是(shi)不(bu)支(zhi)持繼承多個(ge)父(fu)類。但是(shi),與Java相同的(de)(de)是(shi),一(yi)個(ge)結構(gou)體(ti)(ti)可以(yi)實現接口(interface)。Java的(de)(de)關(guan)鍵字import已(yi)經被替換成using,它起到了同樣(yang)的(de)(de)作用(yong)。
類可以是(shi)抽象(xiang)(xiang)的和(he)不可繼承的:一(yi)(yi)個(ge)被申(shen)明成(cheng)abstract的類不能(neng)被實(shi)例化(hua),它(ta)(ta)只能(neng)被用做(zuo)一(yi)(yi)個(ge)基(ji)類,C#關鍵(jian)字(zi)lock就像Java關鍵(jian)字(zi)final,它(ta)(ta)申(shen)明一(yi)(yi)個(ge)類不是(shi)抽象(xiang)(xiang)的,但(dan)是(shi)它(ta)(ta)也(ye)不能(neng)被用做(zuo)另(ling)一(yi)(yi)個(ge)類的基(ji)類接口(kou)(kou):就象(xiang)(xiang)在Java中(zhong)一(yi)(yi)樣,一(yi)(yi)個(ge)接口(kou)(kou)是(shi)一(yi)(yi)組方法(fa)集合的抽象(xiang)(xiang)定(ding)義。當一(yi)(yi)個(ge)類或結(jie)構體實(shi)現一(yi)(yi)個(ge)接口(kou)(kou)的時(shi)候,它(ta)(ta)必(bi)須(xu)實(shi)現這(zhe)個(ge)接口(kou)(kou)中(zhong)定(ding)義的所有方法(fa)。一(yi)(yi)個(ge)單(dan)一(yi)(yi)的類可以實(shi)現幾個(ge)接口(kou)(kou),也(ye)許(xu)以后會(hui)出現一(yi)(yi)些微妙(miao)的差別,但(dan)是(shi)這(zhe)個(ge)特點看起來(lai)與(yu)Java相比(bi)沒有變(bian)化(hua)。
布(bu)爾運算:條件表達式的(de)(de)結果是(shi)(shi)布(bu)爾數(shu)據類(lei)(lei)型(xing)(xing),布(bu)爾數(shu)據類(lei)(lei)型(xing)(xing)是(shi)(shi)這(zhe)種語言中(zhong)獨立的(de)(de)一(yi)種數(shu)據類(lei)(lei)型(xing)(xing),從(cong)布(bu)爾類(lei)(lei)型(xing)(xing)到其(qi)他類(lei)(lei)型(xing)(xing)沒有直接的(de)(de)轉換(huan)過程,布(bu)爾常(chang)量true和false是(shi)(shi)C#中(zhong)的(de)(de)關鍵字(zi)。錯(cuo)誤處(chu)理(li):如Java中(zhong)那樣,通過拋(pao)出和捕捉(zhuo)異常(chang)對象來管理(li)錯(cuo)誤處(chu)理(li)過程。
內存管理:由底層.NET框架進行自動內存垃圾回收(shou)。
接(jie)(jie)口:是其他(ta)類(lei)(lei)型(xing)為確保它們支持某些(xie)操作而實(shi)現的(de)引用類(lei)(lei)型(xing)。接(jie)(jie)口從不直接(jie)(jie)創建而且沒(mei)有實(shi)際(ji)的(de)表示形式(shi),其他(ta)類(lei)(lei)型(xing)必須(xu)轉換(huan)為接(jie)(jie)口類(lei)(lei)型(xing)。
一個接口(kou)定義一個協定。實現接口(kou)的(de)類(lei)或結構必須遵守其(qi)協定。接口(kou)可(ke)以包含方(fang)法、屬性、索引器和事件作為成員。
強類(lei)型(xing):C#是(shi)一(yi)個強類(lei)型(xing)的(de)(de)語言,它的(de)(de)數值類(lei)型(xing)有一(yi)些可以(yi)進行隱式轉換(huan),其他的(de)(de)必須顯(xian)(xian)式轉換(huan),隱式轉換(huan)的(de)(de)類(lei)型(xing)只能(neng)是(shi)長度短(duan)的(de)(de)類(lei)型(xing)轉換(huan)成長的(de)(de)類(lei)型(xing),int可以(yi)轉換(huan)成long、float、double、decimal,反(fan)之必須顯(xian)(xian)式的(de)(de)轉換(huan)。
編(bian)譯:程序直(zhi)接編(bian)譯成(cheng)標準的二進(jin)制(zhi)可執行形式.但C#的源程序并(bing)不是(shi)被(bei)(bei)編(bian)譯成(cheng)二進(jin)制(zhi)可執行形式,而是(shi)一(yi)種中(zhong)間語言(IL),類似于JAVA字節碼(ma)。如果前面的Hello World程序被(bei)(bei)保存(cun)成(cheng)一(yi)個
文(wen)本(ben)文(wen)件并(bing)被命名(ming)為Hello.cs,它將(jiang)被編譯成命名(ming)Hello.exe的可執行程序。
C#程(cheng)序(xu)不能直接編譯(yi)成標準的(de)二進制(zhi)可執行形式,與Java類似(si),它被編譯(yi)成為(wei)(wei)中間(jian)代碼(Microsoft Intermediate Language),然后通過.NET Framework的(de)虛擬機(ji)——被稱之為(wei)(wei)通用語言執行層(Common Language Runtime, CLR)——執行。
一個C#的(de)結構(gou)(gou)(gou)體與(yu)C++的(de)結構(gou)(gou)(gou)體是相似的(de),因為它能夠包(bao)含數據聲明和方法.但是,不(bu)象C++,C#結構(gou)(gou)(gou)體與(yu)類是不(bu)同的(de)而且不(bu)支持(chi)繼承.但是,與(yu)Java相同的(de)是,一個結構(gou)(gou)(gou)體可以實現接口。
預編(bian)(bian)譯:C#中存(cun)在預編(bian)(bian)譯指(zhi)令支持(chi)條件編(bian)(bian)譯,警告(gao),錯誤(wu)報(bao)告(gao)和編(bian)(bian)譯行控(kong)制.可用的預編(bian)(bian)譯指(zhi)令有:#define,#undef,#if,#elif,#else,#endif,#warning,#error,#line。
沒(mei)有(you)了#include偽指(zhi)(zhi)令(ling)(ling),無法再用#define語句對符(fu)號(hao)賦值,所以就不存在源(yuan)代碼替換的(de)概念--這些符(fu)號(hao)只能用在#if和#elif偽指(zhi)(zhi)令(ling)(ling)里(li).在#line偽指(zhi)(zhi)令(ling)(ling)里(li)的(de)數字(和可選的(de)名字)能夠修改行號(hao)還有(you)#warning和#error輸出(chu)結果的(de)文件名。
類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing):C#中(zhong)(zhong)的(de)類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)一共分(fen)為(wei)兩類(lei)(lei)(lei),一類(lei)(lei)(lei)是(shi)(shi)值(zhi)類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)(Value Type),一類(lei)(lei)(lei)是(shi)(shi)引用類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)(Reference Type)。值(zhi)類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)和引用類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)是(shi)(shi)以它們在(zai)(zai)計(ji)算機內存中(zhong)(zhong)是(shi)(shi)如(ru)何(he)被分(fen)配的(de)來劃分(fen)的(de)。值(zhi)類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)包(bao)括(kuo)結(jie)構和枚舉,引用類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)包(bao)括(kuo)類(lei)(lei)(lei)、接口(kou)、委托等。還有一種特(te)殊的(de)值(zhi)類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing),稱為(wei)簡單(dan)類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)(Simple Type),比如(ru)byte,int等,這些(xie)簡單(dan)類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)實際上(shang)是(shi)(shi)FCL類(lei)(lei)(lei)庫類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)的(de)別名,比如(ru)聲明一個int類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing),實際上(shang)是(shi)(shi)聲明一個System.Int32結(jie)構類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)。因此(ci),在(zai)(zai)Int32類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)中(zhong)(zhong)定義(yi)的(de)操作,都可以應(ying)用在(zai)(zai)int類(lei)(lei)(lei)型(xing)(xing)(xing)(xing)(xing)上(shang),比如(ru) “123.Equals(2)”。
所有(you)的值類型(xing)都隱式地(di)繼承自System.ValueType類型(xing)(注意System.ValueType本身(shen)是一個類類型(xing)),System.ValueType和所有(you)的引(yin)用類型(xing)都繼承自System.Object基類。不(bu)能(neng)顯式地(di)讓結構繼承一個類,因(yin)為C#不(bu)支持多重繼承,而結構已(yi)經隱式繼承自ValueType。
NOTE:堆(dui)棧(zhan)(stack)是(shi)一種(zhong)后進(jin)先出的(de)數據結構,在內存中,變(bian)(bian)量會被(bei)分(fen)配(pei)(pei)在堆(dui)棧(zhan)上(shang)來進(jin)行操作。堆(dui)(heap)是(shi)用于為類型實例(li)(對(dui)象(xiang)(xiang)(xiang))分(fen)配(pei)(pei)空間的(de)內存區(qu)域(yu),在堆(dui)上(shang)創建一個(ge)對(dui)象(xiang)(xiang)(xiang),會將對(dui)象(xiang)(xiang)(xiang)的(de)地址傳給堆(dui)棧(zhan)上(shang)的(de)變(bian)(bian)量(反(fan)過來叫變(bian)(bian)量指向此對(dui)象(xiang)(xiang)(xiang),或者變(bian)(bian)量引用此對(dui)象(xiang)(xiang)(xiang))。
中間代(dai)碼(ma)(ma):微軟在(zai)用(yong)戶選擇何時MSIL應該編(bian)譯(yi)成機器(qi)碼(ma)(ma)的(de)(de)(de)(de)(de)時候是(shi)(shi)(shi)留了(le)很大(da)(da)的(de)(de)(de)(de)(de)余地.微軟公司很小心的(de)(de)(de)(de)(de)聲稱MSIL不(bu)是(shi)(shi)(shi)解(jie)釋性(xing)的(de)(de)(de)(de)(de),而是(shi)(shi)(shi)被編(bian)譯(yi)成了(le)機器(qi)碼(ma)(ma).它(ta)也明(ming)(ming)白許多--如果不(bu)是(shi)(shi)(shi)大(da)(da)多數的(de)(de)(de)(de)(de)話--程(cheng)序(xu)員(yuan)認為Java程(cheng)序(xu)要(yao)不(bu)可避免(mian)的(de)(de)(de)(de)(de)比C編(bian)寫(xie)的(de)(de)(de)(de)(de)任何東西都要(yao)慢(man).而這(zhe)種(zhong)實(shi)現(xian)方式(shi)決定了(le)基于MSIL的(de)(de)(de)(de)(de)程(cheng)序(xu)(指(zhi)的(de)(de)(de)(de)(de)是(shi)(shi)(shi)用(yong)C#,Visual Basic,"Managed C++"--C++的(de)(de)(de)(de)(de)一個符合CLS的(de)(de)(de)(de)(de)版本--等語言編(bian)寫(xie)的(de)(de)(de)(de)(de)程(cheng)序(xu))將(jiang)在(zai)性(xing)能上超(chao)過"解(jie)釋性(xing)的(de)(de)(de)(de)(de)"Java代(dai)碼(ma)(ma).當然,這(zhe)一點還需要(yao)得到(dao)事實(shi)證明(ming)(ming),因為C#和其他生(sheng)成MSIL的(de)(de)(de)(de)(de)編(bian)譯(yi)器(qi)還沒有發布.但是(shi)(shi)(shi)Java JIT編(bian)譯(yi)器(qi)的(de)(de)(de)(de)(de)普遍存在(zai)使得Java和C#在(zai)性(xing)能上相對相同.象(xiang)"C#是(shi)(shi)(shi)編(bian)譯(yi)語言而Java是(shi)(shi)(shi)解(jie)釋性(xing)的(de)(de)(de)(de)(de),"之類(lei)的(de)(de)(de)(de)(de)聲明(ming)(ming)只是(shi)(shi)(shi)商業技(ji)巧.Java的(de)(de)(de)(de)(de)中間代(dai)碼(ma)(ma)和MSIL都是(shi)(shi)(shi)中間的(de)(de)(de)(de)(de)匯編(bian)形式(shi)的(de)(de)(de)(de)(de)語言,它(ta)們在(zai)運行時或其它(ta)的(de)(de)(de)(de)(de)時候被編(bian)譯(yi)成機器(qi)代(dai)碼(ma)(ma)。
基本數(shu)(shu)據(ju)類(lei)(lei)型:C#擁(yong)有(you)(you)比C/C++或者(zhe)Java更廣泛的(de)(de)數(shu)(shu)據(ju)類(lei)(lei)型.這(zhe)些類(lei)(lei)型是(shi)(shi)(shi)bool、byte、sbyte、short、ushort、int、uint、long、ulong、float、double和decimal,像Java一(yi)(yi)樣(yang),所有(you)(you)這(zhe)些類(lei)(lei)型都(dou)有(you)(you)一(yi)(yi)個(ge)固定的(de)(de)大小.又像C和C++一(yi)(yi)樣(yang),每個(ge)數(shu)(shu)據(ju)類(lei)(lei)型都(dou)有(you)(you)有(you)(you)符號和無(wu)符號兩種類(lei)(lei)型.與Java相同的(de)(de)是(shi)(shi)(shi),一(yi)(yi)個(ge)字符變量包含的(de)(de)是(shi)(shi)(shi)一(yi)(yi)個(ge)16位(wei)的(de)(de)Unicode字符,C#新的(de)(de)數(shu)(shu)據(ju)類(lei)(lei)型是(shi)(shi)(shi)decimal數(shu)(shu)據(ju)類(lei)(lei)型,對于貨幣數(shu)(shu)據(ju),它能存(cun)放28位(wei)10進制數(shu)(shu)字。
兩個(ge)(ge)基(ji)本類:一(yi)(yi)個(ge)(ge)名(ming)叫(jiao)object的類是所有(you)其他類的基(ji)類。而(er)一(yi)(yi)個(ge)(ge)名(ming)叫(jiao)string的類也象object一(yi)(yi)樣(yang)是這個(ge)(ge)語(yu)言(yan)的一(yi)(yi)部(bu)分(fen).作為語(yu)言(yan)的一(yi)(yi)部(bu)分(fen)存在意味著編(bian)(bian)譯(yi)器有(you)可能使用它,無論何時(shi)在程序(xu)中寫入(ru)一(yi)(yi)句帶引號的字符串,編(bian)(bian)譯(yi)器會創建(jian)一(yi)(yi)個(ge)(ge)string對(dui)象來保存它。
參數傳(chuan)(chuan)遞(di):方(fang)法(fa)可以(yi)被(bei)聲(sheng)明(ming)(ming)接受可變(bian)數目(mu)的參數.缺省的參數傳(chuan)(chuan)遞(di)方(fang)法(fa)是(shi)對基本數據類型進行值(zhi)傳(chuan)(chuan)遞(di)。ref關(guan)鍵(jian)字可以(yi)用(yong)(yong)(yong)來強(qiang)迫(po)一個(ge)(ge)變(bian)量通過(guo)引用(yong)(yong)(yong)傳(chuan)(chuan)遞(di),這(zhe)(zhe)使(shi)得(de)一個(ge)(ge)變(bian)量可以(yi)接受一個(ge)(ge)返(fan)回值(zhi)。out關(guan)鍵(jian)字也能(neng)聲(sheng)明(ming)(ming)引用(yong)(yong)(yong)傳(chuan)(chuan)遞(di)過(guo)程,與ref不(bu)同的地(di)方(fang)是(shi),它(ta)指明(ming)(ming)這(zhe)(zhe)個(ge)(ge)參數并不(bu)需(xu)要初(chu)始值(zhi)。
COM的(de)(de)集成:C#對Windows程(cheng)序最大(da)的(de)(de)賣點可(ke)(ke)能(neng)(neng)(neng)就是(shi)它(ta)與COM的(de)(de)無(wu)縫(feng)集成了(le),COM就是(shi)微軟(ruan)的(de)(de)Win32組件(jian)技術.實際上,最終有(you)可(ke)(ke)能(neng)(neng)(neng)在(zai)任何(he).NET語(yu)言里編寫(xie)COM客戶和(he)服務(wu)器端。C#編寫(xie)的(de)(de)類可(ke)(ke)以子類化一個(ge)已(yi)存在(zai)的(de)(de)COM組件(jian);生成的(de)(de)類也能(neng)(neng)(neng)被作為一個(ge)COM組件(jian)使用(yong),然(ran)后(hou)又能(neng)(neng)(neng)使用(yong),比方說,JScript語(yu)言子類化它(ta)從(cong)而得到第三個(ge)COM組件(jian)。這(zhe)種現(xian)象的(de)(de)結(jie)果(guo)是(shi)導(dao)致了(le)一個(ge)運行環(huan)境的(de)(de)產生,在(zai)這(zhe)個(ge)環(huan)境里的(de)(de)組件(jian)是(shi)網絡服務(wu),可(ke)(ke)用(yong)任何(he).NET語(yu)言子類化。
索引(yin)下標(biao):一(yi)(yi)個(ge)索引(yin)與屬性(xing)除(chu)了不(bu)使用(yong)屬性(xing)名來(lai)引(yin)用(yong)類成員(yuan)而是(shi)用(yong)一(yi)(yi)個(ge)方括(kuo)號中的數字來(lai)匿(ni)名引(yin)用(yong)(就象(xiang)用(yong)數組下標(biao)一(yi)(yi)樣)以外是(shi)相似的。
代理和(he)反(fan)饋(kui):一(yi)個代理對(dui)象(xiang)包括了訪問一(yi)個特定對(dui)象(xiang)的(de)特定方(fang)(fang)法(fa)所需的(de)信(xin)息.只要把它當成(cheng)一(yi)個聰明的(de)方(fang)(fang)法(fa)指針就行(xing)了。代理對(dui)象(xiang)可(ke)以(yi)被移動到(dao)另一(yi)個地方(fang)(fang),然(ran)后可(ke)以(yi)通過訪問它來(lai)對(dui)已存(cun)在(zai)的(de)方(fang)(fang)法(fa)進行(xing)類(lei)型安全的(de)調用.一(yi)個反(fan)饋(kui)方(fang)(fang)法(fa)是(shi)代理的(de)特例.event關鍵字用在(zai)將(jiang)在(zai)事件發生的(de)時(shi)候(hou)被當成(cheng)代理調用的(de)方(fang)(fang)法(fa)聲明中。
C#所開發的(de)(de)(de)(de)程(cheng)(cheng)(cheng)序源(yuan)代(dai)(dai)(dai)(dai)碼(ma)并不是編譯(yi)成能夠直接在(zai)操(cao)作系統上(shang)(shang)(shang)執(zhi)(zhi)(zhi)行的(de)(de)(de)(de)二(er)(er)進制本地代(dai)(dai)(dai)(dai)碼(ma)。與(yu)(yu)Java類似,它被(bei)(bei)編譯(yi)成為(wei)(wei)中(zhong)(zhong)間代(dai)(dai)(dai)(dai)碼(ma),然(ran)后通(tong)過.NETFramework的(de)(de)(de)(de)虛擬機(ji)——被(bei)(bei)稱之為(wei)(wei)通(tong)用(yong)(yong)語言運(yun)行庫(CLR)——執(zhi)(zhi)(zhi)行。所有(you)的(de)(de)(de)(de).Net編程(cheng)(cheng)(cheng)語言都(dou)被(bei)(bei)編譯(yi)成這種被(bei)(bei)稱為(wei)(wei)MSIL(Microsoft Intermediate Language)的(de)(de)(de)(de)中(zhong)(zhong)間代(dai)(dai)(dai)(dai)碼(ma)。因此雖然(ran)最(zui)終的(de)(de)(de)(de)程(cheng)(cheng)(cheng)序在(zai)表面上(shang)(shang)(shang)仍然(ran)與(yu)(yu)傳統意義上(shang)(shang)(shang)的(de)(de)(de)(de)可執(zhi)(zhi)(zhi)行文件都(dou)具(ju)有(you)“.exe”的(de)(de)(de)(de)后綴名。但是實際(ji)上(shang)(shang)(shang),如(ru)果計算(suan)機(ji)上(shang)(shang)(shang)沒有(you)安(an)裝.Net Framework,那(nei)么(me)這些(xie)程(cheng)(cheng)(cheng)序將(jiang)不能夠被(bei)(bei)執(zhi)(zhi)(zhi)行。在(zai)程(cheng)(cheng)(cheng)序執(zhi)(zhi)(zhi)行時,.Net Framework將(jiang)中(zhong)(zhong)間代(dai)(dai)(dai)(dai)碼(ma)翻(fan)譯(yi)成為(wei)(wei)二(er)(er)進制機(ji)器(qi)碼(ma),從而使(shi)它得到正(zheng)確的(de)(de)(de)(de)運(yun)行。最(zui)終的(de)(de)(de)(de)二(er)(er)進制代(dai)(dai)(dai)(dai)碼(ma)被(bei)(bei)存(cun)儲(chu)在(zai)一(yi)個緩沖區(qu)中(zhong)(zhong)。所以一(yi)旦程(cheng)(cheng)(cheng)序使(shi)用(yong)(yong)了相(xiang)同的(de)(de)(de)(de)代(dai)(dai)(dai)(dai)碼(ma),那(nei)么(me)將(jiang)會調用(yong)(yong)緩沖區(qu)中(zhong)(zhong)的(de)(de)(de)(de)版本。這樣如(ru)果一(yi)個.Net程(cheng)(cheng)(cheng)序第二(er)(er)次被(bei)(bei)運(yun)行,那(nei)么(me)這種翻(fan)譯(yi)不需要進行第二(er)(er)次,速度明顯加快(kuai)。
C#語言是一(yi)種安全(quan)的(de)、穩定的(de)、簡(jian)單(dan)的(de)、面向對象的(de)編程語言,它不僅去掉了C++和Java語言中的(de)一(yi)些復雜(za)特(te)性,還提供了可視(shi)化工具,能夠高效(xiao)地編寫程序。
C#語言具備如下4個(ge)特點:
(1)簡單、安全在C++和(he)C語言中程序員最頭疼的(de)問題就是指(zhi)針問題,在C#語言中已經(jing)不(bu)再使(shi)用指(zhi)針,而且(qie)不(bu)允許直接讀(du)取內存(cun)等(deng)不(bu)安全的(de)操作。
它比(bi)C、C++、Java提供了更(geng)多的數(shu)據類(lei)型,并且每(mei)個(ge)數(shu)據類(lei)型都是固定大小(xiao)的。
此外(wai)還(huan)提供了(le)命(ming)名(ming)空間(jian)(jian)來管理C#文件(jian),命(ming)名(ming)空間(jian)(jian)相當于(yu)一(yi)(yi)個(ge)文件(jian)夾,在(zai)創建程序時,允許在(zai)一(yi)(yi)個(ge)命(ming)名(ming)空間(jian)(jian)中創建一(yi)(yi)個(ge)或(huo)多個(ge)類,方便(bian)調用和重(zhong)用。
(2)與其他面(mian)向對象(xiang)語(yu)言一(yi)樣,C#語(yu)言也具有面(mian)向對象(xiang)語(yu)言的基本特(te)征,即(ji)封裝、繼(ji)承、多(duo)態(tai)。
封(feng)裝:就是將代(dai)碼看作一個整(zheng)體,例如(ru)使用類(lei)、方法(fa)、接口等。在使用定(ding)義(yi)好的(de)類(lei)、方法(fa)、接口等對象(xiang)時不必考慮其(qi)細節,只需(xu)要知(zhi)道其(qi)對象(xiang)名以及所需(xu)要的(de)參數即可,也是一種提升代(dai)碼安(an)全性的(de)方法(fa)。
繼(ji)(ji)承:是一(yi)種體現代碼重用性的特性,減少代碼的冗余(yu),但在C#語言中(zhong)僅支持單繼(ji)(ji)承。
多態:不僅(jin)體現(xian)了代(dai)碼的(de)重用性(xing),也體現(xian)了代(dai)碼的(de)靈活性(xing),它主要通過(guo)繼(ji)承(cheng)和實現(xian)接口的(de)方式(shi),讓(rang)類(lei)或接口中的(de)成員表現(xian)出不同的(de)作用。
(3)支持跨(kua)平臺(tai)最早的C#語言僅能在(zai) Windows平臺(tai)上(shang)開發(fa)并使用,目前最新的C# 6.0版本已經能在(zai)多個操作系(xi)統上(shang)使用,例如在(zai)Mac、Linux等。此外,還能將其(qi)應用到手機、PDA等設備(bei)上(shang)。
(4)開(kai)發多(duo)種類型的(de)程(cheng)序(xu)(xu)使(shi)用(yong)C#語言不僅能開(kai)發在控制臺下運行的(de)應(ying)用(yong)程(cheng)序(xu)(xu),也(ye)(ye)能開(kai)發Windows窗體(ti)應(ying)用(yong)程(cheng)序(xu)(xu)、網站、手機應(ying)用(yong)等多(duo)種應(ying)用(yong)程(cheng)序(xu)(xu),并且其提供的(de)Visual Studio 2015開(kai)發工具中(zhong)也(ye)(ye)支持(chi)多(duo)種類型的(de)程(cheng)序(xu)(xu),讓開(kai)發人員(yuan)能快速地構建 C#應(ying)用(yong)程(cheng)序(xu)(xu)。
C# 1.0-純粹的面向對象
在(zai)2003年5月,微軟推出(chu)了Visual Studio .NET 2003,同時也發(fa)布了C#的改進版(ban)本——C# 1.1。
這一(yi)時期的(de)(de)C#(以(yi)下稱(cheng)為(wei)(wei)C# 1.x)提(ti)出了純粹的(de)(de)面(mian)向(xiang)對象概(gai)念。C++并非純面(mian)向(xiang)對象的(de)(de),為(wei)(wei)了和C兼容以(yi)及提(ti)供更(geng)高的(de)(de)執行(xing)效率,它保留(liu)了很(hen)多(duo)模塊化(hua)的(de)(de)東西。C#還通過類(lei)類(lei)型(xing)、值類(lei)型(xing)和接(jie)口(kou)類(lei)型(xing)的(de)(de)概(gai)念形成(cheng)了統(tong)一(yi)的(de)(de)類(lei)型(xing)系(xi)統(tong)。
盡(jin)管(guan)C# 1.x提供了如(ru)此多的(de)新鮮概念,但實際上,這些概念都是由CLI提出的(de)。因(yin)此當將一個C#源程序編(bian)譯(yi)為(wei)可(ke)執行文件(jian)時(shi),編(bian)譯(yi)器做的(de)工作相對(dui)而言并不多。需(xu)要(yao)編(bian)譯(yi)器代勞(lao)的(de)是要(yao)將一個簡單的(de)委(wei)托定義語(yu)句翻譯(yi)為(wei)一個繼承System.MulticastDelegate類(lei)型(xing)定義。
C# 2.0-泛型編程新概念
微軟在2004年的(de)6月(yue)份發(fa)布了Visual Studio2005的(de)第一個Beta 版,同時(shi)向開發(fa)者展示了C#語(yu)言的(de)2.0版本。2005年4月(yue),微軟發(fa)布了Visual Studio 2005 Beta2,這(zhe)已(yi)經是具備了幾乎全部功(gong)能的(de)VisualStudio,包括的(de)產品(pin)有(you)SQL Server2005、Team Foundation Server和TeamSuite。這(zhe)時(shi)的(de)C#編譯器已(yi)經能夠處理C# 2.0中所有(you)的(de)新特性(xing)。
C# 2.0為開發(fa)者帶來的(de)最主(zhu)(zhu)要(yao)(yao)的(de)特性就是(shi)泛(fan)(fan)型(xing)編(bian)(bian)程(cheng)(cheng)(cheng)能(neng)力。和面向對(dui)(dui)象(xiang)(xiang)思想(xiang)一(yi)樣,泛(fan)(fan)型(xing)思想(xiang)也是(shi)一(yi)種已(yi)經成(cheng)熟的(de)編(bian)(bian)程(cheng)(cheng)(cheng)思想(xiang),但依(yi)然是(shi)沒有哪一(yi)種主(zhu)(zhu)流(liu)開發(fa)語(yu)言(yan)能(neng)夠支持完備的(de)泛(fan)(fan)型(xing)概(gai)念。這主(zhu)(zhu)要(yao)(yao)是(shi)因為泛(fan)(fan)型(xing)的(de)概(gai)念在(zai)一(yi)定(ding)程(cheng)(cheng)(cheng)度上對(dui)(dui)面向對(dui)(dui)象(xiang)(xiang)概(gai)念進(jin)行(xing)沖擊(ji),同時,由于在(zai)編(bian)(bian)譯(yi)(yi)期間對(dui)(dui)類型(xing)參(can)數的(de)完全(quan)檢測很難做到,很多問(wen)題會被(bei)遺留到運行(xing)時。C# 2.0別出心裁,對(dui)(dui)泛(fan)(fan)型(xing)類型(xing)參(can)數提出了“約束”的(de)新概(gai)念,并以(yi)優雅(ya)的(de)語(yu)法體(ti)現(xian)在(zai)語(yu)言(yan)之(zhi)中。有了約束,結合編(bian)(bian)譯(yi)(yi)器強大(da)的(de)類型(xing)推斷(duan)能(neng)力,可以(yi)在(zai)編(bian)(bian)譯(yi)(yi)時發(fa)現(xian)幾乎所有“危險”的(de)泛(fan)(fan)型(xing)應用(yong)。
C# 2.0的(de)(de)(de)(de)另一(yi)個突出的(de)(de)(de)(de)特性就(jiu)是匿名(ming)(ming)方法(fa)(fa),用來(lai)取(qu)代一(yi)些短小的(de)(de)(de)(de)并且僅(jin)出現(xian)一(yi)次的(de)(de)(de)(de)委(wei)托,使(shi)得語(yu)言結(jie)構更加(jia)緊湊(cou)。匿名(ming)(ming)方法(fa)(fa)除了可以使(shi)得事件處理器的(de)(de)(de)(de)編寫更加(jia)精簡以外(wai),還將(jiang)開(kai)發者(zhe)帶入(ru)了程序設(she)計的(de)(de)(de)(de)一(yi)個新的(de)(de)(de)(de)領(ling)域——函數式(shi)(shi)編程,曾(ceng)經(jing)有高人(ren)就(jiu)用匿名(ming)(ming)方法(fa)(fa)結(jie)合泛型編程實現(xian)了函數式(shi)(shi)編程中(zhong)的(de)(de)(de)(de)重要結(jie)構——Lambda表達式(shi)(shi)。盡(jin)管(guan)這種實現(xian)顯(xian)得很繁瑣而且不易理解,但畢竟是實現(xian)了。
C#3.0-(研發代號“Orcas”)
2005年9月(yue)份(fen)的PDC大會(hui)——C#3.0(研發代號“Orcas”——魔鬼)的技術預覽版(ban)。說(shuo)到C#3.0,就不得不提(ti)一下微軟的LINQ項目,LINQ(語言(yan)集成查詢(xun),Language Integrated Query)提(ti)出了(le)一種通過面向(xiang)對(dui)象語法來實現對(dui)非面向(xiang)對(dui)象數(shu)(shu)據源的查詢(xun)技術,可查詢(xun)的數(shu)(shu)據源從關系型數(shu)(shu)據庫延伸到一般意義上的集合(如數(shu)(shu)組(zu)和列表)以及XML。而C#3.0則是(shi)率(lv)先(xian)實現了(le)LINQ的語言(yan)。
在C#3.0中,可(ke)(ke)以(yi)用(yong)類(lei)似于SQL語(yu)句(ju)的語(yu)法從一個數據源中輕松地得到滿足一定(ding)條件的對(dui)象集(ji)合。例如要(yao)查找一個字(zi)符串(chuan)數組names中所有長度(du)大于5的字(zi)符串(chuan),就可(ke)(ke)以(yi)寫:var longname = from n in names wheren.Length > 5 select n;
這(zhe)(zhe)樣就得到(dao)一個新的(de)字符數組(zu)longname,其中包含了(le)所(suo)需要的(de)結果。這(zhe)(zhe)種語句(ju)(ju)稱(cheng)作查詢語句(ju)(ju),與SQL語句(ju)(ju)唯一的(de)區別是(shi)(shi)C#中的(de)查詢語句(ju)(ju)往往把select子(zi)句(ju)(ju)放到(dao)最后(這(zhe)(zhe)反(fan)而(er)倒有些類似(si)于中文的(de)閱讀(du)順序了(le))。初次看到(dao)這(zhe)(zhe)樣一個語句(ju)(ju),可能(neng)會(hui)有很大(da)疑問:這(zhe)(zhe)還是(shi)(shi)C#語言(yan)嗎?這(zhe)(zhe)的(de)確是(shi)(shi)合(he)乎語法規則(ze)的(de)C#代碼(ma),而(er)且(qie)編譯(yi)器可以識別這(zhe)(zhe)種語法。然而(er)實際(ji)上,C#編譯(yi)器并不會(hui)對這(zhe)(zhe)種語法進行實際(ji)的(de)的(de)編譯(yi),而(er)是(shi)(shi)將其翻譯(yi)為正常的(de)方法調用。
C# 4.0動態編程
C# 4.0 新(xin)增(zeng) dynamic關鍵字,提供動態編程(dynamic programming),把(ba)既(ji)有的靜態物(wu)件標記為動態物(wu)件,類似javascript, Python 或 Ruby。
C# 10
根據育(yu)龍網資料評(ping)價顯示:C#幾乎集中了(le)所(suo)有關于軟(ruan)(ruan)件開發(fa)和軟(ruan)(ruan)件工(gong)程研究的(de)(de)(de)(de)最新(xin)成果:面向對(dui)象、類型安全、組(zu)件技術、自動內存(cun)管(guan)(guan)理、跨平臺異常處理、版本控制、代(dai)碼(ma)安全管(guan)(guan)理……。盡管(guan)(guan)像(xiang)很(hen)多(duo)人注意(yi)(yi)到的(de)(de)(de)(de)一樣,羅(luo)列上(shang)述特(te)性時(shi),總是讓人想到JAVA,然而(er)C#確實走得更遠(yuan)。但現(xian)實的(de)(de)(de)(de)情況是,非技術的(de)(de)(de)(de)因素(su)往往更能(neng)決定一個產(chan)品的(de)(de)(de)(de)未來(lai),尤其在計算機(ji)軟(ruan)(ruan)件的(de)(de)(de)(de)歷史上(shang),技術卓(zhuo)越的(de)(de)(de)(de)產(chan)品,如OS/2、Mac OS、UNIX等,都敗在了(le)Windows漂亮的(de)(de)(de)(de)界(jie)面上(shang)。JAVA的(de)(de)(de)(de)用(yong)(yong)戶主(zhu)要(yao)是網絡服務的(de)(de)(de)(de)開發(fa)者和嵌入式設備軟(ruan)(ruan)件的(de)(de)(de)(de)開發(fa)者,嵌入式設備軟(ruan)(ruan)件不是C#的(de)(de)(de)(de)用(yong)(yong)武之(zhi)地(di),而(er)在網絡服務方(fang)面,C#的(de)(de)(de)(de)即(ji)時(shi)編譯和本地(di)代(dai)碼(ma)Cache方(fang)案比JAVA虛擬(ni)機(ji)具(ju)有絕對(dui)的(de)(de)(de)(de)性能(neng)優(you)勢。何況C#一旦成為一個像(xiang)C++一樣的(de)(de)(de)(de)公共的(de)(de)(de)(de)標(biao)準,軟(ruan)(ruan)件開發(fa)商(shang)既可以(yi)省去JAVA的(de)(de)(de)(de)許可證費用(yong)(yong),也不必擔心成為微軟(ruan)(ruan)的(de)(de)(de)(de)奴(nu)隸,那些反(fan)微軟(ruan)(ruan)的(de)(de)(de)(de)人士和主(zhu)張廠(chang)商(shang)獨立(li)的(de)(de)(de)(de)人士可能(neng)也不會(hui)有什么意(yi)(yi)見。這可能(neng)正是微軟(ruan)(ruan)所(suo)期待的(de)(de)(de)(de)。
如(ru)果把C#和JAVA在網絡服務領域的爭奪比(bi)作未來制空(kong)權的爭奪,那么(me)C#和傳統通(tong)用(yong)快速開(kai)發工具——VB、DELPHI等的較量將是(shi)地(di)地(di)道道的白刃戰。可能(neng)最慘的程(cheng)序員就是(shi)VB程(cheng)序員,在微軟,VB就像(xiang)離任的克(ke)林頓,不(bu)但失去了所有的光(guang)輝(hui),而且亂事纏身。
其(qi)實在編程(cheng)語言(yan)中真(zhen)正的(de)(de)(de)(de)(de)霸主多年(nian)來一直(zhi)是(shi)(shi)C++,所有的(de)(de)(de)(de)(de)操作系統和絕大(da)多數的(de)(de)(de)(de)(de)商品軟(ruan)件(jian)(jian)都(dou)是(shi)(shi)用C++作為主要開(kai)(kai)發(fa)語言(yan)的(de)(de)(de)(de)(de)。JAVA的(de)(de)(de)(de)(de)程(cheng)序員絕大(da)多數也(ye)是(shi)(shi)C++的(de)(de)(de)(de)(de)愛(ai)好者,PHP的(de)(de)(de)(de)(de)成功里面也(ye)有類似C++的(de)(de)(de)(de)(de)語法的(de)(de)(de)(de)(de)功勞。在操作系統、設備驅動程(cheng)序、視頻游戲等領域,C++在很(hen)長的(de)(de)(de)(de)(de)時間內仍(reng)將(jiang)占(zhan)(zhan)據主要地(di)位(wei),而(er)在數量最大(da)的(de)(de)(de)(de)(de)應用軟(ruan)件(jian)(jian)的(de)(de)(de)(de)(de)開(kai)(kai)發(fa)上(shang),C#很(hen)可能取代(dai)(dai)C++的(de)(de)(de)(de)(de)位(wei)置(zhi)。首先,C#和JAVA一樣,簡(jian)直(zhi)就是(shi)(shi)照(zhao)搬了C++的(de)(de)(de)(de)(de)部分(fen)語法,因此,對于(yu)數量眾多的(de)(de)(de)(de)(de)C++程(cheng)序員學習起來很(hen)容易上(shang)手,另外,對于(yu)新手來說,比C++要簡(jian)單一些。其(qi)次,Windows是(shi)(shi)占(zhan)(zhan)壟斷地(di)位(wei)的(de)(de)(de)(de)(de)平臺,而(er)開(kai)(kai)發(fa)Windows應用,當然微(wei)軟(ruan)的(de)(de)(de)(de)(de)聲(sheng)音是(shi)(shi)不能忽略(lve)的(de)(de)(de)(de)(de)。最重要的(de)(de)(de)(de)(de)是(shi)(shi),相對于(yu)C++,用C#開(kai)(kai)發(fa)應用軟(ruan)件(jian)(jian)可以大(da)大(da)縮短開(kai)(kai)發(fa)周(zhou)期,同時可以利用原來除用戶(hu)界(jie)面代(dai)(dai)碼(ma)之(zhi)外的(de)(de)(de)(de)(de)C++代(dai)(dai)碼(ma)。
但是(shi),C#也(ye)有(you)(you)(you)(you)弱(ruo)點(dian)。首先(xian),在(zai)一(yi)些版(ban)本較(jiao)舊的(de)(de)(de)(de)(de)Windows平臺上,C#的(de)(de)(de)(de)(de)程(cheng)序還(huan)(huan)不(bu)能運(yun)(yun)行(xing),因為(wei)C# 程(cheng)序需(xu)要(yao).NET運(yun)(yun)行(xing)庫(ku)(ku)(ku)作為(wei)基礎,而.NET運(yun)(yun)行(xing)庫(ku)(ku)(ku)作為(wei)Windows(XP及以后(hou)版(ban)本)的(de)(de)(de)(de)(de)一(yi)部分發行(xing),Windows Me和 Windows 2000用(yong)(yong)戶只能以Service Pack的(de)(de)(de)(de)(de)形(xing)式安(an)裝使(shi)(shi)用(yong)(yong)。其(qi)(qi)次,C#能夠使(shi)(shi)用(yong)(yong)的(de)(de)(de)(de)(de)組件或庫(ku)(ku)(ku)還(huan)(huan)只有(you)(you)(you)(you).NET運(yun)(yun)行(xing)庫(ku)(ku)(ku)等很(hen)少的(de)(de)(de)(de)(de)選擇,沒(mei)有(you)(you)(you)(you)豐富的(de)(de)(de)(de)(de)第(di)(di)三(san)方軟(ruan)件庫(ku)(ku)(ku)可(ke)用(yong)(yong),這(zhe)需(xu)要(yao)有(you)(you)(you)(you)一(yi)個過(guo)程(cheng),同時各軟(ruan)件開發商的(de)(de)(de)(de)(de)支持也(ye)很(hen)重要(yao)。第(di)(di)三(san),JAVA的(de)(de)(de)(de)(de)成(cheng)功因素里(li)有(you)(you)(you)(you)一(yi)些是(shi)反微軟(ruan)陣營的(de)(de)(de)(de)(de)吹捧,雖然(ran)“只寫(xie)一(yi)次,到處運(yun)(yun)行(xing)”只是(shi)一(yi)句口號,但畢竟已(yi)經是(shi)一(yi)種成(cheng)熟的(de)(de)(de)(de)(de)技術。而C# 的(de)(de)(de)(de)(de)鼓吹者只有(you)(you)(you)(you)名聲不(bu)佳的(de)(de)(de)(de)(de)微軟(ruan),且只能運(yun)(yun)行(xing)在(zai)Windows上。實際上這(zhe)兩種語言都不(bu)是(shi)不(bu)可(ke)替代(dai)的(de)(de)(de)(de)(de),理(li)智的(de)(de)(de)(de)(de)說,對(dui)軟(ruan)件開發商而言,什(shen)么(me)用(yong)(yong)的(de)(de)(de)(de)(de)最熟什(shen)么(me)就是(shi)最好的(de)(de)(de)(de)(de)工具。尤(you)其(qi)(qi)對(dui)C++的(de)(de)(de)(de)(de)使(shi)(shi)用(yong)(yong)者,C# 沒(mei)有(you)(you)(you)(you)帶來任何新(xin)東(dong)西,因為(wei).NET運(yun)(yun)行(xing)庫(ku)(ku)(ku)在(zai)C++中(zhong)也(ye)可(ke)以使(shi)(shi)用(yong)(yong),沒(mei)有(you)(you)(you)(you)要(yao)換(huan)的(de)(de)(de)(de)(de)絕對(dui)的(de)(de)(de)(de)(de)理(li)由。
C#將不(bu)(bu)可避免地(di)崛起,在Windows平(ping)臺上(shang)(shang)成為主(zhu)角,而(er)JAVA將在UNIX、Linux等平(ping)臺上(shang)(shang)成為霸主(zhu),C++將繼續在系統軟件領域大展拳腳。非(fei)常有(you)意思(si)的(de)(de)是,這(zhe)些語(yu)(yu)言的(de)(de)語(yu)(yu)法極(ji)其接近(jin),因為JAVA和C#都是由C++發(fa)(fa)展而(er)來的(de)(de)。其他(ta)的(de)(de)開(kai)發(fa)(fa)工具當(dang)然還會在相當(dang)長的(de)(de)時(shi)間里繼續他(ta)們的(de)(de)旅程,不(bu)(bu)過在市場份額(e)上(shang)(shang),將不(bu)(bu)可避免地(di)受到沖擊。