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