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