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