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