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