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