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