文章編號:10618時間:2024-09-28人氣:
在現(xiàn)代快速發(fā)展的技術(shù)環(huán)境中,應(yīng)用程序的性能至關(guān)重要。用戶期望應(yīng)用程序快速、響應(yīng)迅速且可靠。對于使用 Mainwin32 庫開發(fā)的 Windows 應(yīng)用程序,遵循面向性能的編程原則至關(guān)重要,以滿足這些期望。
要提升應(yīng)用程序性能,必須首先分析其當(dāng)前狀態(tài)。有許多工具和技術(shù)可用于此目的,包括:
識別性能瓶頸后,可以采取多種技術(shù)來改善應(yīng)用程序性能:
嵌入式系統(tǒng)應(yīng)具有的特點是:高可靠性;在惡劣的環(huán)境或突然斷電的情況下,系統(tǒng)仍然能夠正常工作;許多嵌入式應(yīng)用要求實時性,這就要求嵌入式操作系統(tǒng)具有實時處理能力;嵌入式系統(tǒng)和具體應(yīng)用有機地結(jié)合在一起,它的升級換代也是具體產(chǎn)品同步進行;嵌入式系統(tǒng)中的軟件代碼要求高質(zhì)量、高可靠性,一般都固化在只讀存儲器中或閃存中,也就是說軟件要求固態(tài)化存儲,而不是存儲在磁盤等載體中。 1、嵌入式系統(tǒng)與嵌入式操作系統(tǒng)1.1 嵌入式系統(tǒng)嵌入式系統(tǒng)是以嵌入式計算機為技術(shù)核心,面向用戶、面向產(chǎn)品、面向應(yīng)用,軟硬件可裁減的,適用于對功能、可靠性、成本、體積、功耗等綜合性能有嚴(yán)格要求的專用計算機系統(tǒng)。 嵌入式系統(tǒng)應(yīng)具有的特點是:高可靠性;在惡劣的環(huán)境或突然斷電的情況下,系統(tǒng)仍然能夠正常工作;許多嵌入式應(yīng)用要求實時性,這就要求嵌入式操作系統(tǒng)具有實時處理能力;嵌入式系統(tǒng)和具體應(yīng)用有機地結(jié)合在一起,它的升級換代也是具體產(chǎn)品同步進行;嵌入式系統(tǒng)中的軟件代碼要求高質(zhì)量、高可靠性,一般都固化在只讀存儲器中或閃存中,也就是說軟件要求固態(tài)化存儲,而不是存儲在磁盤等載體中。 1.2 嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)EOS(Embedded Operating System)是一種用途廣泛的系統(tǒng)軟件,過去它主要應(yīng)用于工業(yè)控制和國防系統(tǒng)領(lǐng)域。 EOS負責(zé)嵌入系統(tǒng)的全部軟、硬件資源的分配、調(diào)度作,控制、協(xié)調(diào)并發(fā)活動;它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達到系統(tǒng)所要求的功能。 目前,已推出一些應(yīng)用比較成功的EOS產(chǎn)品系列。 隨著 Internet技術(shù)的發(fā)展、信息家電的普及應(yīng)用及EOS的微型化和專業(yè)化,EOS開始從單一的弱功能向高專業(yè)化的強功能方向發(fā)展。 嵌入式操作系統(tǒng)在系統(tǒng)實時高效性、硬件的相關(guān)依賴性、軟件固化以及應(yīng)用的專用性等方面具有較為突出的特點。 EOS是相對于一般操作系統(tǒng)而方的,它除具備了一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機制、中斷處理、文件處理等外,還有以下特點:①可裝卸性。 開放性、可伸縮性的體系結(jié)構(gòu)。 ②強實時性。 EOS實時性一般較強,可用于各種設(shè)備控制當(dāng)中。 ③統(tǒng)一的接口。 提供各種設(shè)備驅(qū)動接口。 ④操作方便、簡單、提供友好的圖形GUI,圖形界面,追求易學(xué)易用。 ⑤提供強大的網(wǎng)絡(luò)功能,支持TCP/IP協(xié)議及其它協(xié)議,提供TCP/UDP/IP/PPP協(xié)議支持及統(tǒng)一的MAC訪問層接口,為各種移動計算設(shè)備預(yù)留接口。 ⑥強穩(wěn)定性,弱交互性。 嵌入式系統(tǒng)一旦開始運行就不需要用戶過多的干預(yù),這就要負責(zé)系統(tǒng)管理的EOS具有較強的穩(wěn)定性。 嵌入式操作系統(tǒng)的用戶接口一般不提供操作命令,它通過系統(tǒng)的調(diào)用命令向用戶程序提供服務(wù)。 ⑦固化代碼。 在嵌入式系統(tǒng)中,嵌入式操作系統(tǒng)和應(yīng)用軟件被固化在嵌入式系統(tǒng)計算機的ROM中。 輔助存儲器在嵌入式系統(tǒng)中很少使用,因此,嵌入式操作系統(tǒng)的文件管理功能應(yīng)該能夠很容易地拆卸,而用各種內(nèi)存文件系統(tǒng)。 ⑧更好的硬件適應(yīng)性,也就是良好的移植性。 國際上用于信息電器的嵌入式操作系統(tǒng)有40種左右。 現(xiàn)在,市場上非常流行的EOS產(chǎn)品,包括3Com公司下屬子公司的Palm OS,全球占有份額達50%,Microsoft公司的Windows CE不過29%。 在美國市場,Palm OS更以80%的占有率遠超Windows CE。 開源的linux很適于做信息家電的開發(fā)。 比如:中科紅旗軟件技術(shù)有限公司開發(fā)的紅旗嵌入式Linux和美商網(wǎng)虎公司開發(fā)的基于Xlinux 的嵌入式操作系統(tǒng)“夸克”。 “夸克”是目前全世界最小的Linux,它有兩具很突出的特點,就是體積小和使用GCS編碼。 2、三種常用的嵌入式操作系統(tǒng)2.1 Palm OSPalm是3Com公司的產(chǎn)品,其操作系統(tǒng)為Palm OS。 Palm OS是一種32位的嵌入式操作系統(tǒng)。 Palm提供了串行通信接口和紅外線傳輸接口,利用它可以方便地與其它外部設(shè)備通信、傳輸數(shù)據(jù);擁有開放的OS應(yīng)用程序接口,開發(fā)商可根據(jù)需要自行開發(fā)所需的應(yīng)用程序。 Palm OS是一套具有術(shù)強開放性的系統(tǒng),現(xiàn)在有大約數(shù)千種專用為Palm OS編寫的應(yīng)用程序,從程序內(nèi)容上看,小到個人管理、游戲,大到行業(yè)解決方案,Palm OS無所不包。 在豐富的軟件支持下,基于Palm OS的掌上電腦功能得以不斷擴展。 Palm OS是一套專門為掌上電腦開發(fā)的OS。 在編寫程序時,Palm OS充分考慮了掌上電腦內(nèi)存相對較小的情況,因此它只占有非常小的內(nèi)存。 由于基于Palm OS編寫的應(yīng)用程序占用的空間也非常小(通常只有幾十KB),所以,基于Palm OS的掌上電腦(雖然只有幾MB的RAM)可以運行眾多應(yīng)用程序。 由于Palm產(chǎn)品的最大特點是使用簡便、機體輕巧,因此決定了Palm OS應(yīng)具有以下特點。 ①操作系統(tǒng)的節(jié)能功能。 由上掌上電腦要求使用電源盡可能小,因此在Palm OS的應(yīng)用程序中,如果沒有事件運行,則系統(tǒng)設(shè)備進入半休眠(doze)的狀態(tài);如果應(yīng)用程序停止活動一段時間,則系統(tǒng)自動進入休眠(sleep)狀態(tài)。 ②合理的內(nèi)存管理。 Palm的存儲器全部是可讀寫的快速RAM,動態(tài)RAM(Dynamic RAM)類似于PC機上的RAM,它為全局變量和其它不需永久保存的數(shù)據(jù)提供臨時的存儲空間;存儲RAM(Storage RAM)類似于PC機上的硬盤,可以永久保存應(yīng)用程序和數(shù)據(jù)。 ③Palm OS的數(shù)據(jù)是以數(shù)據(jù)庫(database)的格式來存儲的。 數(shù)據(jù)庫是由一組記錄(records)和一些數(shù)據(jù)庫頭信息組成的。 為保證程序處理速度和存儲器空間,在處理數(shù)據(jù)的時候,Palm OS不是把數(shù)據(jù)從存儲堆(Storage Heap)拷貝到動態(tài)堆(Dynamic Heap)后再進行處理,而是在存儲堆中直接處理。 為避免錯誤地調(diào)用存儲器地址,Palm OS規(guī)定,這一切都必須調(diào)用其內(nèi)存管理器里的API來實現(xiàn)。 Palm OS與同步軟件(HotSync)結(jié)合可以使掌上電腦與PC機上的信息實現(xiàn)同步,把臺式同的功能擴展到了掌上電腦。 Palm應(yīng)用范圍相當(dāng)廣泛,如:聯(lián)絡(luò)及工作表管理、電子郵件及互聯(lián)網(wǎng)通信、銷售人員及組別自動化等等。 Palm外圍硬件也十分豐富,有數(shù)碼相機、GPS接收器、調(diào)制解調(diào)器、GSM無線電話、數(shù)碼音頻播放設(shè)備、便攜鍵盤、語音記錄器、條碼掃描、無線尋呼接收器、探測儀。 其中Palm與GPS結(jié)合的應(yīng)用,不但可以作導(dǎo)航定位,還可以結(jié)合GPS作氣候的監(jiān)測、地名調(diào)查等。 2.2 Windows CEWindows CE是微軟開發(fā)的一個開放的、可升級的32位嵌入式操作系統(tǒng),是基于掌上型電腦類的電子設(shè)備操作。 它是精簡的Windows 95。 Windows CE的圖形用戶界面相當(dāng)出色。 其中CE中的C代表袖珍(Compact)、消費(Consumer)、通信能力(Connectivity)和伴侶(Companion);E代表電子產(chǎn)品(Electronics)。 與Windows 95/98、Windows NT不同的是,Windows CE是所有源代碼全部由微軟自行開發(fā)的嵌入式新型操作系統(tǒng),其操作界面雖來源于Windows 95/98,但Windows CE是基于Win32 API重新開發(fā)的、新型的信息設(shè)備平臺。 Windows CE具有模塊化、結(jié)構(gòu)化和基于Win32應(yīng)用程序接口以及與處理器無關(guān)等特點。 Windows CE不僅繼承了傳統(tǒng)的Windows圖形界面,并且在Windows CE平臺上可以使用Windows 95/98上的編程工具(如Visual Basic、Visual C++等)、使用同樣的函數(shù)、使用同樣的界面網(wǎng)格,使絕大多數(shù)的應(yīng)用軟件只需簡單的修改和移植就可以在Windows CE平臺上繼續(xù)使用。 Windows CE的設(shè)計目標(biāo)是:模塊化及可伸縮性、實時性能好,通信能力強大,支持多種CPU。 它的設(shè)計可以滿足多種設(shè)備的需要,這些設(shè)備包括了工業(yè)控制器、通信集線器以及銷售終端之類的企業(yè)設(shè)備,還有像照相機、電話和家用娛樂器材之類的消費產(chǎn)品。 一個典型的基于Windows CE的嵌入系統(tǒng)通常為某個特定用途而設(shè)計,并在不聯(lián)機的情況下工作。 它要求所使用的操作系統(tǒng)體積較小,內(nèi)建有對中斷的響應(yīng)功能。 Windows CE的特點有:①具有靈活的電源管理功能,包括瞬眠/喚醒模式。 ②使用了對象存儲(object store)技術(shù),包括文件系統(tǒng)、注冊表及數(shù)據(jù)庫。 它還具有很多高性能、高效率的操作系統(tǒng)特 性,包括按需換頁、共享存儲、交叉處理同步、支持大容量堆(heap)等。 ③擁有良好的通信能力。 廣泛支持各種通信硬件,亦支持直接的局域連接以及撥號連接,并提供與PC、內(nèi)部網(wǎng)以及Internet的連接,還提供與Windows 9x/NT的最佳集成和通信。 ④支持嵌套中斷。 允許更高優(yōu)先級別的中斷首先得到響應(yīng),而不是等待低級別的ISR完成。 這使得該操作系統(tǒng)具有嵌入式操作系統(tǒng)所要求的實時性。 ⑤更好的線程響應(yīng)能力。 對高級別IST(中斷服務(wù)線程)的響應(yīng)時間上限的要求更加嚴(yán)格,在線程響應(yīng)能力方面的改進,幫助開發(fā)人員掌握線程轉(zhuǎn)換的具體時間,并通過增強的監(jiān)控能力和對硬件的控制能力幫助他們創(chuàng)建新的嵌入式應(yīng)用程序。 ⑥256個優(yōu)先級別。 可以使開發(fā)人員在控制嵌入式系統(tǒng)的時序安排方面有更大的靈活性。 ⑦Windows CE的API是Win32 API的一個子集,支持近1500個Win32 API。 有了這些API,足可以編寫任何復(fù)雜的應(yīng)用程序。 當(dāng)然,在Windows CE系統(tǒng)中,所提供的API也可以隨具體應(yīng)用的需求而定。 在掌上型電腦中,Windows CE包含如下一些重要組件:Pocket Outlook及其組件、語音錄音機、移動頻道、遠程撥號訪問、世界時鐘、計算器、多種輸入法、GBK字符集、中文TTF字庫、英漢雙向詞典、袖珍瀏覽器、電子郵件、Pocket Office、系統(tǒng)設(shè)置、Windows CE Services軟件。 2.3 LinuxLinux是一個類似于Unix的操作系統(tǒng)。 它起源于芬蘭一個名為Linus Torvalds的業(yè)余愛好,但是現(xiàn)在已經(jīng)是最為流行的一款開放源代碼的操作系統(tǒng)。 Linux從1991年問世到現(xiàn)在,短短10年的時間內(nèi)已發(fā)展成為一個功能強大、設(shè)計完善的操作系統(tǒng),伴隨網(wǎng)絡(luò)技術(shù)進步而發(fā)展起來的Linux OS已成為Microsoft公司的DOS和Windows 95/98的強勁對手。 Linux系統(tǒng)不僅能夠運行于PC平臺,還在嵌入式系統(tǒng)方面大放光芒,在各種嵌入式Linux OS迅速發(fā)展的狀況下,Linux OS逐漸形成了可與Windows CE等EOS進行抗衡的局面。 目前正在開發(fā)的嵌入式系統(tǒng)中,49%的項目選擇Linux作為嵌入式操作系統(tǒng)。 Linux現(xiàn)已成為嵌入式操作的理想選擇。 中科紅旗軟件技術(shù)有限公司開發(fā)的紅旗嵌入式Linux正在成為許多嵌入式設(shè)備廠商的首選。 在不到一年的時間內(nèi),紅旗公司先后推出了PDA、機頂盒、瘦客戶機、交換機用的嵌入式Linux系統(tǒng),并且投入了實際應(yīng)用。 現(xiàn)以紅旗嵌入式Linux為例來講解嵌入式Linux OS的特點:①精簡的內(nèi)核,性能高、穩(wěn)定,多任務(wù)。 ②適用于不同的CPU,支持多種體系結(jié)構(gòu),如X86、ARM、MIPS、ALPHA、SPARC等。 ③能夠提供完善的嵌入式GUI以及嵌入式X-Windows。 ④提供嵌入式瀏覽器、郵件程序、MP3播放器、MPEG播放器、記事本等應(yīng)用程序。 ⑤提供完整的開發(fā)工具和SDK,同時提供PC上的開發(fā)版本。 ⑥用戶可定制,可提供圖形化的定制和配置工具。 ⑦常用嵌入式芯片的驅(qū)動集,支持大量的周邊硬件設(shè)備,驅(qū)動豐富。 ⑧針對嵌入式的存儲方案,提供實時版本和完善的嵌入式解決方案。 ⑨完善的中文支持,強大的技術(shù)支持,完整的文檔。 ⑩開放源碼,豐富的軟件資源,廣泛的軟件開發(fā)者的支持,價格低廉,結(jié)構(gòu)靈活,適用面廣。 3、三種嵌入式操作系統(tǒng)的比較3.1 Linux OS與Windows Ce的比較嵌入式Linux OS與Windows CE相比的優(yōu)點:第一,Linux是開放源代碼的,不在存黑箱技術(shù),遍布全球的眾多Linux愛好者都是Linux開發(fā)者的強大技術(shù)支持者;而 Windows CE是非開放性O(shè)S,使第三方很難實現(xiàn)產(chǎn)品定制。 第二,Linux的源代碼隨處可得,注釋豐富,文檔齊全,易于解決各種問題。 第三,Linux的內(nèi)核小、效率高;而Windows CE在這方面是笨拙的,占用過多的RAM,應(yīng)用程序龐大。 第四,Linux是開放源代碼的OS,在價格上極具競爭力,適合中國國情。 Windows CE的版權(quán)費用是廠家不得不考慮的因素。 第五,Linux不僅支持x86芯片,還是一個跨平臺的系統(tǒng)。 到目前為止,它可以支持20~30種CPU,很多 CPU(包括家電業(yè)的芯片)廠商都開始做Linux的平臺移植工作,而且移植的速度遠遠超過Java的開發(fā)環(huán)境。 如果今天采用Linux環(huán)境開發(fā)產(chǎn)品,那么將來更換CPU時就不會遇到更換平臺的困擾。 第六,Linux內(nèi)核的結(jié)構(gòu)在網(wǎng)絡(luò)方面是非常完整的,它提供了對包括十兆位、百兆位及千兆位的以太網(wǎng)絡(luò),還有無線網(wǎng)絡(luò)、Token ring(令牌環(huán))和光纖甚至衛(wèi)星的支持。 第七,Linux在內(nèi)核結(jié)構(gòu)的設(shè)計中考慮適應(yīng)系統(tǒng)的可裁減性的要求,Windows CE在內(nèi)核結(jié)構(gòu)的設(shè)計中并未考慮適應(yīng)系統(tǒng)的高度可裁減性的要求。 嵌入式Linux OS與Windows CE相比的弱點:第一,是開發(fā)難度較高,需要很高的技術(shù)實力;第二,是核心調(diào)試工具不全,調(diào)試不太方便,尚沒有很好的用戶圖形界面;第三,與某些商業(yè)OS 一樣,嵌入式Linux占用較大的內(nèi)存,當(dāng)然,人們可以去掉部分無用的功能來減小使用的內(nèi)存,但是如果不仔細,將引起新的問題;第四,有些Linux的應(yīng)用程序需要虛擬內(nèi)存,而嵌入式系統(tǒng)中并沒有或不需要虛擬內(nèi)存,所以并非所有的Linux應(yīng)用程序都可以在嵌入式系統(tǒng)中運行。 3.2 Palm OS與Windows CE的比較3Com公司的Palm OS是掌上電腦市場中較為優(yōu)秀的嵌入式操作系統(tǒng),是針對這一市場專門設(shè)計的系統(tǒng)。 它有開放的操作系統(tǒng)應(yīng)用程序接口(API),支持開發(fā)商根據(jù)需要自行開發(fā)所需的應(yīng)用程序,具有十分豐富的應(yīng)用程序。 在掌上電腦市場上獨占其霸主地位已久。 從技術(shù)層面上講,Palm OS是一套專門為掌上電腦開發(fā)的操作系統(tǒng),具有許多Windows CE無法比擬的優(yōu)勢;Windows CE過于臃腫,不適合應(yīng)用在廉價的掌上電腦中。 Palm OS是一套具有極強開放性的系統(tǒng)。 開發(fā)者向用戶免費提供Palm OS的開發(fā)工具,允許用戶利用該工具在Palm OS基礎(chǔ)上方便地編寫、修改相關(guān)軟件。 與之相比,Windows CE的開發(fā)工具就顯得復(fù)雜多了,這使得一般用戶很難掌握。 這也Palm OS與Windows CE的另一個主要區(qū)別。 我們從常用EOS的大小、可開發(fā)定制、互操作性、通用性、實時性及應(yīng)用領(lǐng)域幾個方面,通過表1來歸納如下:結(jié)語Palm OS、Windows CE、Linux這三種嵌入式操作系統(tǒng)各有不同的特點,不同的用途;但Linux比Palm OS和Windows CE更小、更穩(wěn)定,而且Linux是開放的OS,在價格上極具競爭力。 如今整個市場尚未成型,嵌入式操作系統(tǒng)也未形成統(tǒng)一的國際標(biāo)準(zhǔn),而且Linux的一系列特征又為我們開發(fā)國產(chǎn)的嵌入式操作系統(tǒng)提供了方便,因此,我們有機會在這個未成熟的市場上占有一席之地。
網(wǎng)絡(luò)的百科有詳細的介紹的:【概述】C++,這個詞在中國大陸的程序員圈子中通常被讀做“C加加”,而西方的程序員通常讀做“C plus plus”,它是一種使用非常廣泛的計算機編程語言。
C++是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多重編程范式的通用程序設(shè)計語言。
它支持過程序程序設(shè)計、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計等多種程序設(shè)計風(fēng)格。
貝爾實驗室的本賈尼·斯特勞斯特盧普(w:en:Bjarne Stroustrup)博士在20世紀(jì)80年代發(fā)明并實現(xiàn)了C++(最初這種語言被稱作“C with Classes”)。
一開始C++是作為C語言的增強版出現(xiàn)的,從給C語言增加類開始,不斷的增加新特性。
虛函數(shù)(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標(biāo)準(zhǔn)。
1998年國際標(biāo)準(zhǔn)組織(ISO)頒布了C++程序設(shè)計語言的國際標(biāo)準(zhǔn)ISO/IEC -1998。
遺憾的是,由于C++語言過于復(fù)雜,以及他經(jīng)歷了長年的演變,直到現(xiàn)在(2004年)只有少數(shù)幾個編譯器完全符合這個標(biāo)準(zhǔn)(這么說也是不完全正確的,事實上,至今為止沒有任何一款編譯器完全支持ISO C++)。
另外,就目前學(xué)習(xí)C++而言,可以認為他是一門獨立的語言;他并不依賴C語言,我們可以完全不學(xué)C語言,而直接學(xué)習(xí)C++。
根據(jù)《C++編程思想》(Thinking in C++)一書所評述的,C++與C的效率往往相差在正負5%之間。
所以有人認為在大多數(shù)場合C++ 完全可以取代C語言(然而我們在單片機等需要謹(jǐn)慎利用空間、直接操作硬件的地方還是要使用C語言)。
【子語言】根據(jù)Effective C++第三版第一條款的描述,現(xiàn)在C++由以下四個“子語言”組成:1、C子語言。
C++支持C語言的幾乎全部功能,在語法上與C語言僅有極微妙的差別(如括號表達式的左右值性,具體請參考C++標(biāo)準(zhǔn)文獻)。
2、面向?qū)ο蟮腃++。
C++首先作為一門面向?qū)ο蟮恼Z言而聞名,這個特點在這里不再詳述。
3、泛型編程語言。
C++強大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運行期效率。
4、STL(C++標(biāo)準(zhǔn)模板庫)。
隨著STL的不斷發(fā)展,它已經(jīng)逐漸成為C++程序設(shè)計中不可或缺的部分,其效率可能比一般的naive代碼低些,但是其安全性與規(guī)范性使它大受歡迎。
【語言發(fā)展】C++語言發(fā)展大概可以分為三個階段:第一階段從80年代到1995年。
這一階段C++語言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z言,并且憑借著接近C語言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相當(dāng)大份額;第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(STL)和后來的Boost等程序庫的出現(xiàn),泛型程序設(shè)計在C++中占據(jù)了越來越多的比重性。
當(dāng)然,同時由于Java、C#等語言的出現(xiàn)和硬件價格的大規(guī)模下降,C++受到了一定的沖擊;第三階段從2000年至今,由于以Loki、MPL等程序庫為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),C++出現(xiàn)了發(fā)展歷史上又一個新的高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使C++已經(jīng)成為當(dāng)今主流程序設(shè)計語言中最復(fù)雜的一員。
【C++的Hello World程序】在使用兼容C89標(biāo)準(zhǔn)(也稱為ANSI C)的編譯器時,下面這個程序顯示“Hello, world!”然后結(jié)束運行: (事實上這并不是符合98標(biāo)準(zhǔn)[ISO C++]的C++程序,而且在多數(shù)編譯器上這個程序也不能運行,若要在比較舊的編譯器上編譯該程序,應(yīng)將iostream改為iostream.h)#include
C#(讀做 C sharp,中文譯音“夏普”)是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\行于 Framework之上的高級程序設(shè)計語言,并定于在微軟職業(yè)開發(fā)者論壇(PDC)上登臺亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程.但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司 windows網(wǎng)絡(luò)框架的主角. 在本文中,我將考察創(chuàng)建一種新計算機語言的一般動機,并將特別指明是什么原因?qū)е铝薈#的出現(xiàn).然后我將介紹C#和它與Java,c,c++的相似之處.其次我將討論一些存在于Java和C#之間的高層次的,和基礎(chǔ)的差別.我將以衡量在用多種語言開發(fā)大型應(yīng)用程序的時候所需的知識(或者對這種知識的缺乏程度)來結(jié)束本文,而這正是和C#的一個主要戰(zhàn)略.目前,C#和還只能以C#語言規(guī)則,以及Windows 2000的一個d預(yù)覽版本,還有MSDN上迅速增多的文檔集子的形式獲得(還沒有最終定型). 微軟c#語言定義主要是從C和C++繼承而來的,而且語言中的許多元素也反映了這一點.C#在設(shè)計者從C++繼承的可選選項方面比Java要廣泛一些(比如說structs),它還增加了自己新的特點(比方說源代碼版本定義).但它還太不成熟,不可能擠垮Java.C#還需要進化成一種開發(fā)者能夠接受和采用的語言.而微軟當(dāng)前為它的這種新語言大造聲勢也是值得注意的.目前大家的反應(yīng)是:這是對Java的反擊. C#更象Java一些,雖然微軟在這個問題上保持沉默.這也是意料中的事情,我覺得,因為Java近來很成功而使用Java的公司都報告說它們在生產(chǎn)效率上比C++獲得了提高. Java所帶來的巨大影響和大家對它的廣泛接受已經(jīng)由工作于這種語言和平臺之上的程序員數(shù)量明顯的說明了(估計世界范圍內(nèi)共有兩百五十萬程序員使用Java).由這種語言寫成的應(yīng)用程序的數(shù)量是令人驚訝的并已經(jīng)滲透了每一個級別的計算,包括無線計算和移動電話(比如日本發(fā)明的Java電話).C#能夠在用戶領(lǐng)域獲得這樣的禮遇嗎?我們必須等待并觀望,就象已經(jīng)由SSI公司的CEO和主席Kalpathi S. Suresh指出來的那樣,我發(fā)現(xiàn)所有這些都是漸進的.如果C#不存在,我們總能回到Java或C和C++.這些都不完全是新技術(shù);它們在更大的意義上來說只是大公司制造的市場噱頭.我們必須給他們時間安頓下來看看這些是不是真的對IT工業(yè)有什么影響. C#從Java繼承而來的特點 類:在C#中類的申明與Java很相似.這是合理的因為經(jīng)驗告訴我們Java模型工作得很好的關(guān)鍵字import已經(jīng)被替換成using,它起到了同樣的作用.一個類開始執(zhí)行的起點是靜態(tài)方法Main().下面的Hello World程序展示了基本的形式: using System; class Hello { static void Main() { (Hello, world); } } 在這個例子中,System這個名字指向一個包括了基本C#實用類集合的命名空間(namespace).這個命名空間包括了Console類,它在這個例子中被用來輸出一個字符串.類可以是抽象的和不可繼承的:一個被申明成abstract的類不能被實例化;它只能被用做一個基類.C#關(guān)鍵字sealed就象Java關(guān)鍵字final,它申明一個類不是抽象的,但是它也不能被用做另一個類的基類.界面:就象在Java中一樣,一個界面是一組方法集合的抽象定義.當(dāng)一個類或結(jié)構(gòu)體實現(xiàn)一個界面的時候,它必須實現(xiàn)這個界面中定義的所有方法.一個單一的類可以實現(xiàn)幾個界面.也許以后會出現(xiàn)一些微妙的差別,但是這個特點看起來與Java相比沒有變化.布爾運算:條件表達式的結(jié)果是布爾數(shù)據(jù)類型,布爾數(shù)據(jù)類型是這種語言中獨立的一種數(shù)據(jù)類型.從布爾類型到其他類型沒有直接的轉(zhuǎn)換過程.布爾常量true和false是C#中的關(guān)鍵字.錯誤處理:如Java中那樣,通過拋出和捕捉異常對象來管理錯誤處理過程.內(nèi)存管理:由底層框架進行自動內(nèi)存垃圾回收. C#從C和C++繼承的特點 編譯:程序直接編譯成標(biāo)準(zhǔn)的二進制可執(zhí)行形式.但C#的源程序并不是被編譯成二進制可執(zhí)行形式,而是一中中間語言,類似于JAVA字節(jié)碼。
如果前面的Hello World程序被保存成一個文本文件并被命名為,它將被編譯成命的可執(zhí)行程序. 結(jié)構(gòu)體:一個C#的結(jié)構(gòu)體與C++的結(jié)構(gòu)體是相似的,因為它能夠包含數(shù)據(jù)聲明和方法.但是,不象C++,C#結(jié)構(gòu)體與類是不同的而且不支持繼承.但是,與Java相同的是,一個結(jié)構(gòu)體可以實現(xiàn)界面. 預(yù)編譯:C#中存在預(yù)編譯指令支持條件編譯,警告,錯誤報告和編譯行控制.可用的預(yù)編譯指令有: #define #undef #if #elif #else #endif #warning #error #line [] 沒有了#include 偽指令.你無法再用#define 語句對符號賦值,所以就不存在源代碼替換的概念--這些符號只能用在#if和#elif偽指令里.在#line偽指令里的數(shù)字(和可選的名字)能夠修改行號還有#warning和#error輸出結(jié)果的文件名. 操作符重載:一些操作符能夠被重載,而另一些則不能.特別的是,沒有一個賦值運算符能夠被重載.能夠被被重載的單目操作符是: + - ! ~ ++ -- true false 能夠被重載的二元運算符是: + - * / % & | ^ << >> == != > < >= <= C#獨有的特點 C#最引人入勝的地方是它和Java的不同,而不是相似的地方.這一節(jié)(和這個系列第二部分的大部分地方)講述了C#實現(xiàn)的和Java不同的地方或者Java根本沒有的特點. 中間代碼:微軟在用戶選擇何時MSIL應(yīng)該編譯成機器碼的時候是留了很大的余地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機器碼.它也明白許多--如果不是大多數(shù)的話--程序員認為Java程序要不可避免的比C編寫的任何東西都要慢.而這種實現(xiàn)方式?jīng)Q定了基于MSIL的程序(指的是用C#,Visual Basic,Managed C++--C++的一個符合CLS的版本--等語言編寫的程序)將在性能上超過解釋性的Java代碼.當(dāng)然,這一點還需要得到事實證明,因為C#和其他生成MSIL的編譯器還沒有發(fā)布.但是Java JIT編譯器的普遍存在使得Java和C#在性能上相對相同.象C#是編譯語言而Java是解釋性的,之類的聲明只是商業(yè)技巧的中間代碼和MSIL都是中間的匯編形式的語言,它們在運行時或其它的時候被編譯成機器代碼. 命名空間中的申明:當(dāng)你創(chuàng)建一個程序的時候,你在一個命名空間里創(chuàng)建了一個或多個類.同在這個命名空間里(在類的外面)你還有可能聲明界面,枚舉類型和結(jié)構(gòu)體.必須使用using關(guān)鍵字來引用其他命名空間的內(nèi)容. 基本的數(shù)據(jù)類型:C#擁有比C,C++或者Java更廣泛的數(shù)據(jù)類型.這些類型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一樣,所有這些類型都有一個固定的大小.又象C和C++一樣,每個數(shù)據(jù)類型都有有符號和無符號兩種類型.與Java相同的是,一個字符變量包含的是一個16位的Unicode字符.C#新的數(shù)據(jù)類型是decimal數(shù)據(jù)類型,對于貨幣數(shù)據(jù),它能存放28位10進制數(shù)字. 兩個基本類:一個名叫object的類是所有其他類的基類.而一個名叫string的類也象object一樣是這個語言的一部分.作為語言的一部分存在意味著編譯器有可能使用它--無論何時你在程序中寫入一句帶引號的字符串,編譯器會創(chuàng)建一個string對象來保存它. 參數(shù)傳遞:方法可以被聲明接受可變數(shù)目的參數(shù).缺省的參數(shù)傳遞方法是對基本數(shù)據(jù)類型進行值傳遞關(guān)鍵字可以用來強迫一個變量通過引用傳遞,這使得一個變量可以接受一個返回值關(guān)鍵字也能聲明引用傳遞過程,與ref不同的地方是,它指明這個參數(shù)并不需要初始值. 與COM的集成:C#對Windows程序最大的賣點可能就是它與COM的無縫集成了,COM就是微軟的Win32組件技術(shù).實際上,最終有可能在任何語言里編寫COM客戶和服務(wù)器端.C#編寫的類可以子類化一個以存在的COM組件;生成的類也能被作為一個COM組件使用,然后又能使用,比方說,JScript語言子類化它從而得到第三個COM組件.這種現(xiàn)象的結(jié)果是導(dǎo)致了一個運行環(huán)境的產(chǎn)生,在這個環(huán)境里的組件是網(wǎng)絡(luò)服務(wù),可用用任何語言子類化. 索引下標(biāo):一個索引與屬性除了不使用屬性名來引用類成員而是用一個方括號中的數(shù)字來匿名引用(就象用數(shù)組下標(biāo)一樣)以外是相似的. public class ListBox: Control { private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value; Repaint(); } } } 可以用一個循環(huán)器來匿名引用字符串內(nèi)部數(shù)組成員,就象下面這樣: ListBox listBox = ...; listBox[0] = hello; (listBox[0]); 代理和反饋:一個代理對象包括了訪問一個特定對象的特定方法所需的信息.只要把它當(dāng)成一個聰明的方法指針就行了.代理對象可以被移動到另一個地方,然后可以通過訪問它來對已存在的方法進行類型安全的調(diào)用.一個反饋方法是代理的特例關(guān)鍵字用在將在事件發(fā)生的時候被當(dāng)成代理調(diào)用的方法聲明.補充:C#簡史——摘自《程序員》雜志2005-12月刊C# 簡史編者按:時間過得真快,居然現(xiàn)在就可以寫C#的簡史了。
但是想想也不奇怪,C#可謂起點高、發(fā)展快的新一代語言,它的這五年走過了很多前輩十幾年的路。
公允地說,C#是目前兼顧系統(tǒng)開發(fā)和應(yīng)用開發(fā)的最佳實用語言,并且很有可能成為編程語言歷史上的第一個“全能”型語言。
看過這篇簡史,我們都應(yīng)該明白,不要再把C#看成年輕后生了——只要是“馬拉多納”,就早晚當(dāng)“球王”。
C# 1.0,純粹的面向?qū)ο螽?dāng)時間回溯到1998年底,微軟正在忙于新一代COM的設(shè)計工作。
此前,COM一直是組件化開發(fā)中非常成功的一種技術(shù);但由于它僅提供了二進制層面上的統(tǒng)一,因此無法將類型信息和用于支持基礎(chǔ)平臺和開發(fā)工具的信息放到組件中。
這時,Java正在逐步走向成熟。
于是,微軟學(xué)習(xí)Java的做法,將虛擬機的概念引入到了COM領(lǐng)域;同時,微軟提出了“元數(shù)據(jù)”的概念,用于描述組件的類型信息和工具支持信息,并決定將其放入到組件當(dāng)中。
這種“COM虛擬機”的名字在經(jīng)歷了若干爭論后,最終被定為CLR(Common Language Runtime,公共語言運行時)。
與此同時,微軟提出了在該運行時上運作的語言應(yīng)該遵循的一些規(guī)則,以及該虛擬機的類型系統(tǒng)和指令集——所有這些規(guī)范形成了最終的C L I(Common Language Infrastructure,公共語言基礎(chǔ)設(shè)施),并提交給了ECMA委員會。
同時,微軟開發(fā)了CLI的一個實現(xiàn),這就是大名鼎鼎的了。
1998年12月,微軟啟動了一個全新的語言項目——COOL,這是一款專門為CLR設(shè)計的純面向?qū)ο蟮恼Z言,也正是本文的主角——C#的前身。
歷時半年有余,1999年7月份,微軟完成了COOL語言的一個內(nèi)部版本。
直到2000年2月份,微軟才正式將COOL語言更名為C#。
據(jù)說起這個名字是因為C#開發(fā)小組的人很討厭搜索引擎,因此把大部分搜索引擎無法識別的“#” 字符作為該語言名字的一部分;還有一種說法是在音樂當(dāng)中“#”是升調(diào)記號,表達了微軟希望它在C的基礎(chǔ)上更上一層樓的美好愿望——當(dāng)然這些都只是傳說,無從考證。
又是歷經(jīng)了一系列的修改,微軟終于在2000年7月發(fā)布了C#語言的第一個預(yù)覽版。
因此人們一般認為C#是2000年發(fā)布的,并以此來計算它的“年齡”。
在此后的一年多時間里,微軟一直在修補各個測試版本中的BUG。
直到2002年2月,微軟終于推出了遲遲未上市的Visual Studio 7.0,并將其定名為“VisualStudio 2002”。
隨著這套開發(fā)環(huán)境的出爐,開發(fā)者們終于看到了C#語言的第一個正式版本——C# 1.0。
此后,微軟馬不停蹄,Visual Studio也恢復(fù)了往日的開發(fā)進度。
在2003年5月,微軟如期推出了Visual Studio 2003,同時也發(fā)布了C#的改進版本——C# 1.1。
這一時期的C#(以下稱為C# 1.x)提出了純粹的面向?qū)ο蟾拍睿⒃谡Z言特性中展現(xiàn)得淋漓盡致。
C++并非純面向?qū)ο蟮模瑸榱撕虲兼容以及提供更高的執(zhí)行效率,它保留了很多模塊化的東西。
Java盡管號稱是面向?qū)ο蟮模珜嶋H上,對于對象所應(yīng)該具備的三種構(gòu)成結(jié)構(gòu)——屬性、方法和事件,Java僅提供了方法,其它兩種結(jié)構(gòu)都要通過方法來模擬。
在C# 1.x中,所有面向?qū)ο蟮母拍疃荚谡Z言中得到了非常好的體現(xiàn)。
同時,C#還通過類類型、值類型和接口類型的概念形成了統(tǒng)一的類型系統(tǒng)。
C#使用了大家所熟知的語法實現(xiàn)了方法,以至于很多人認為C#和Java、C++等面向?qū)ο笳Z言“非常相像”,這使得從使用其他面向?qū)ο笳Z言轉(zhuǎn)到使用C#的過程非常簡單。
此外,C#還通過無參數(shù)列表的方法聲名語法,結(jié)合get/set訪問器實現(xiàn)了優(yōu)雅的屬性語法。
其中的get訪問器相當(dāng)于獲取屬性值的方法,可以通過一些運算返回最終的結(jié)果,而不是簡單地返回一個變量的值;而set訪問器相當(dāng)于設(shè)置屬性值的方法,在其中可以進行一系列檢測,最后將屬性值賦給相應(yīng)的變量。
同時,通過同時提供get和set訪問器、只提供get訪問器和只提供set訪問器,還可以很方便地實現(xiàn)可讀寫、只讀和只寫的屬性。
C#的這種屬性語法,使得一個屬性在提供該屬性的類的內(nèi)部看來,非常像一組方法;而對于外部調(diào)用類看來,訪問一個對象的屬性和訪問它的公共域沒有任何區(qū)別。
通過委托(稍后介紹),結(jié)合關(guān)鍵字event,C#提供了優(yōu)雅的事件概念。
使用+=運算符,開發(fā)者可以非常方便地將一個事件處理器關(guān)聯(lián)到一個事件上,這個過程稱之為“訂閱”一個事件。
由于委托內(nèi)部封裝了一個調(diào)用鏈表,因此可以方便地為一個事件添加多個事件處理器,這些處理器會自動地依次調(diào)用。
多年的開發(fā)語言進化證明,函數(shù)指針是非常重要也是非常危險的語言特征之一。
同時,基于函數(shù)指針的回調(diào)機制也Windows 核心概念之一。
然而,由于函數(shù)指針很難驗證參數(shù)的類型準(zhǔn)確性,因此C#(確切地說是CLI)提出了“委托”的概念,這是一種類型安全的函數(shù)指針鏈表。
這意味著,C#不僅可以提供回調(diào)機制,同時調(diào)用回調(diào)的一方還無需在其內(nèi)部維護函數(shù)指針列表,所要做的僅僅是聲名一個具有恰當(dāng)委托類型的公共成員即可;而提供回調(diào)的一方也只需通過構(gòu)造一個帶有指定方法的相應(yīng)委托實例,并通過“+=”運算符添加到回調(diào)列表即可。
盡管C# 1.x提供了如此多的新鮮概念,但實際上,這些概念都是由CLI提出的。
因此當(dāng)將一個C#源程序編譯為可執(zhí)行文件時,編譯器做的工作相對而言并不多。
需要編譯器代勞的是要將一個簡單的委托定義語句翻譯為一個繼承自類型定義。
C# 2.0,泛型編程新概念微軟本打算繼續(xù)保證開發(fā)進度,并在2004年推出Visual Studio 2004,但由于其間軟件工程學(xué)尤其是軟件管理學(xué)的大規(guī)模進步,微軟所提供的這種僅具備開發(fā)和調(diào)試功能的IDE已經(jīng)無法滿足團隊開發(fā)的需求。
因此微軟決定在項目設(shè)計和管理工具方面進行了進一步研發(fā),并將其集成到Visual Studio中,以贏回原有的市場。
因此,微軟將Visual 2004“改名”為Visual Studio 2005,并決定推遲一年發(fā)布。
不過,微軟還是堅持在2004年的6月份發(fā)布了Visual Studio2005的第一個Beta 版,同時向開發(fā)者展示了C#語言的2.0版本。
2005年4月,微軟發(fā)布了Visual Studio 2005 Beta2,這已經(jīng)是具備了幾乎全部功能的VisualStudio,包括的產(chǎn)品有SQL Server2005、Team Foundation Server和TeamSuite。
這時的C#編譯器已經(jīng)能夠處理C# 2.0中所有的新特性。
C# 2.0為開發(fā)者帶來的最主要的特性就是泛型編程能力。
和面向?qū)ο笏枷胍粯樱盒退枷胍彩且环N已經(jīng)成熟的編程思想,但依然是沒有哪一種主流開發(fā)語言能夠支持完備的泛型概念。
這主要是因為泛型的概念在一定程度上對面向?qū)ο蟾拍钸M行沖擊,同時,由于在編譯期間對類型參數(shù)的完全檢測很難做到,很多問題會被遺留到運行時。
C# 2.0別出心裁,對泛型類型參數(shù)提出了“約束”的新概念,并以優(yōu)雅的語法體現(xiàn)在語言之中。
有了約束,結(jié)合編譯器強大的類型推斷能力,可以在編譯時發(fā)現(xiàn)幾乎所有“危險”的泛型應(yīng)用。
C# 2.0的另一個突出的特性就是匿名方法,用來取代一些短小的并且僅出現(xiàn)一次的委托,使得語言結(jié)構(gòu)更加緊湊。
匿名方法除了可以使得事件處理器的編寫更加精簡以外,還將開發(fā)者帶入了程序設(shè)計的一個新的領(lǐng)域——函數(shù)式編程,曾經(jīng)有高人就用匿名方法結(jié)合泛型編程實現(xiàn)了函數(shù)式編程中的重要結(jié)構(gòu)—— Lambda 表達式。
盡管這種實現(xiàn)顯得很繁瑣而且不易理解,但畢竟是實現(xiàn)了。
最終,函數(shù)式編程還是被引入到了C#語言中,這將在下一節(jié)中為大家講述。
此外,C# 2.0還進一步增強了語言的表達能力。
在C# 2.0中,屬性語法中的get和set訪問器可以擁有不同的權(quán)限,這就使得定義一個在庫的內(nèi)部可讀寫,而在庫的外部只讀的屬性成為可能。
同時,C# 2.0還提供了迭代器的概念,這使得一個類無需實現(xiàn)IEnumerator 和IEnumerable接口即可實現(xiàn)一個可以進行遍歷的類型,并且無需在類型中維護迭代狀態(tài)。
此時的已經(jīng)得到了很廣泛的認可,并且因為元數(shù)據(jù)為組件帶來了強大的自我描述能力,許多程序庫廠商被吸引到平臺上來。
隨著程序庫數(shù)量的增長,逐漸暴露了命名的問題。
在面向?qū)ο蠹夹g(shù)廣泛發(fā)展后,人們就意識到名字的管理問題,因此幾乎所有的面向?qū)ο笳Z言都提出了“命名空間”的概念;而在C# 1.x時代,這個問題再一次出現(xiàn)。
如果一個庫廠商XX 希望以來命名他們自己的系統(tǒng)基礎(chǔ)庫,那么當(dāng)開發(fā)者使用using System語句時就會產(chǎn)生歧義。
為此。
C# 2.0中提供了global關(guān)鍵字,這為庫中所有的命名空間提供了一個“根”,通過指定global::System和就可以區(qū)別兩個庫了。
這一時期的C#編譯器變得非常復(fù)雜,泛型的引入使得編譯器不得不具備超強的類型推斷能力。
同時,迭代器的思想并非是在CLI層面上實現(xiàn)的,而是由編譯器自動生成了實現(xiàn)I E n u m e r a t o r 和IEnumerable接口類型。
C# 3.0,魔鬼在經(jīng)歷了一系列的改進和完善后,微軟決定于2005年11月發(fā)布Visual Studio2005,該開發(fā)環(huán)境將正式支持C#2.0。
由于此前推出了數(shù)個預(yù)覽版和測試版,大家的期待之情似乎已經(jīng)不是那么強烈了。
而2005年9 月份的PDC大會則為開發(fā)者們帶來了另外的驚喜——C#3.0(研發(fā)代號“Orcas”——魔鬼)的技術(shù)預(yù)覽版。
說到C# 3.0,就不得不提一下微軟的LINQ 項目,LINQ(語言集成查詢,Language Integrated Query)提出了一種通過面向?qū)ο笳Z法來實現(xiàn)對非面向?qū)ο髷?shù)據(jù)源的查詢技術(shù),可查詢的數(shù)據(jù)源從關(guān)系型數(shù)據(jù)庫延伸到一般意義上的集合(如數(shù)組和列表)以及XML。
而C# 3.0則是率先實現(xiàn)了LINQ的語言。
在C# 3.0中,我們可以用類似于SQL語句的語法從一個數(shù)據(jù)源中輕松地得到滿足一定條件的對象集合。
例如要查找一個字符串?dāng)?shù)組names中所有長度大于5的字符串,就可以寫:var longname = from n in names > 5 select n;這樣我們就得到一個新的字符數(shù)組longname,其中包含了我們所需要的結(jié)果。
這種語句稱作查詢語句,與SQL語句唯一的區(qū)別是C#中的查詢語句往往把select子句放到最后(這反而倒有些類似于中文的閱讀順序了)。
初次看到這樣一個語句,我們可能會有很大疑問:這還是C#語言嗎?這的確是合乎語法規(guī)則的C#代碼,而且編譯器可以識別這種語法。
然而實際上,C#編譯器并不會對這種語法進行實際的的編譯,而是將其翻譯為正常的方法調(diào)用:var longname = (n => > 5)(n);然后再進行進一步的編譯。
在上面的例子中已經(jīng)說明,names是一個存放有字符串的數(shù)組,而數(shù)組類型并沒有Where的方法。
的確,Where并非names的成員方法,微軟也沒有對數(shù)組類型進行任何改動。
這是C# 3.0中另外一個重要的新特性:擴展方法。
擴展方法是定義在其他靜態(tài)類中的靜態(tài)方法,其第一個參數(shù)的類型就是希望擴展的類型,并且這個參數(shù)被冠以this修飾符。
擴展方法是靜態(tài)的,但可以像調(diào)用被擴展類型的實例方法那樣進行調(diào)用,看起來好像是被擴展類型自己的方法一樣。
這就為語言帶來了很大的靈活性,我們可以將一組近似的功能如上面的Where 和Select等(這在LINQ中被稱作“標(biāo)準(zhǔn)查詢表達式”)定義在一個外部類中,這樣既無須修改現(xiàn)有類型,又可以將新功能組織在一起。
當(dāng)然,為了做到面向?qū)ο蟮姆庋b性,擴展方法只能在被擴展類型的公共成員上進行操作,如果需要從內(nèi)部對類型進行改進,就必須改變現(xiàn)有類型的代碼。
在Where方法的參數(shù)列表里,我們又發(fā)現(xiàn)了一種奇怪的語法:n => > 5。
這就是我們上文提到過的Lambda 表達式。
微軟的官方規(guī)范中稱,Lambda 表達式是匿名方法的一種自然進化。
因此Lambda 表達式其實也是一種特殊的委托,由編譯器負責(zé)生成一個匿名的委托類型,它接受一個字符串類型的參數(shù)n;返回值為布爾類型,表示n的長度是否大于5;其中的參數(shù)類型和返回值類型都是由編譯器推斷而來的。
說到類型推斷,還要解釋的一點就是上面的語句中出現(xiàn)的新關(guān)鍵字var。
從出現(xiàn)的位置來看,var應(yīng)該是一個類型。
然而這又不是一個C#內(nèi)建類型,也不是CLI提出的新類型;它只是一個“占位符”,它的確表示一個類型,但具體是什么類型需要編譯器在編譯期間進行推斷。
Lamda表達式的真正意義不僅僅在于簡化了委托的編寫方式,更重要的是它把代碼表達式體現(xiàn)為了數(shù)據(jù)。
換句話說,Lambda表達式不僅可以被編譯為一段可以執(zhí)行的代碼(類似于匿名方法),也可以將其翻譯為一個數(shù)據(jù)結(jié)構(gòu)——表達式樹。
而如何處理Lambda 表達式,是由編譯器根據(jù)Lambda表達式的使用方式來自動確定的。
當(dāng)把一個Lambda表達式賦給一個具有委托類型的域、屬性或變量時,編譯器像編譯匿名方法一樣將表達式體翻譯成一段可執(zhí)行代碼;而當(dāng)把一個L a m b d a 表達式賦給一個具有Expression
copy的,你看看語法結(jié)構(gòu)上,C++和C#基本上相同,只有以下方面有所區(qū)別:1、繼承:C++支持多繼承,C#類只能繼承一個基類中的實現(xiàn)但可以實現(xiàn)多個接口。 2、數(shù)組:聲明 C# 數(shù)組和聲明 C++ 數(shù)組的語法不同。 在 C# 中,“[]”標(biāo)記出現(xiàn)在數(shù)組類型的后面。 3、數(shù)據(jù)類型:在C++中bool類可以與整型轉(zhuǎn)換,但C#中bool 類型和其他類型(特別是 int)之間沒有轉(zhuǎn)換。 long 類型:在 C# 中,long 數(shù)據(jù)類型為 64 位,而在 C++ 中為 32 位。 4、struct 類型:在 C# 中,類和結(jié)構(gòu)在語義上不同。 struct 是值類型,而 class 是引用類型。 5、switch 語句:與 C++ 中的 switch 語句不同,C# 不支持從一個 case 標(biāo)簽貫穿到另一個 case 標(biāo)簽。 C++的switch后跟參數(shù)必須是int型,而C#卻允許string型6、delegate 類型:委托與 C++ 中的函數(shù)指針基本相似,但前者具有類型安全,是安全的。 7、C#中所有對象都只能通過關(guān)鍵詞“new”來創(chuàng)建,C++的“類名_對象名”方式在C#中變?yōu)槁暶饕粋€引用。 8、異常處理:C#中引入了 finally 語句,這是C++沒有的,C++允許拋出任何類型,而C#中規(guī)定拋出類型為一個派生于的對象。 9、C# 運算符:C# 支持其他運算符,如 is 和 typeof。 它還引入了某些邏輯運算符的不同功能。 10、static 的使用:static方法只能由類名調(diào)用,改變static變量。 11、C#在構(gòu)造基類上替代 C++ 初始化列表的方法。 12、Main 方法和 C++ 及Java中的 main 函數(shù)的聲明方式不同,Main而不能用main13、方法參數(shù):C# 支持 ref 和 out 參數(shù),這兩個參數(shù)取代指針通過引用傳遞參數(shù)。 14、在 C# 中只能在unsafe不安全模式下才使用指針。 15、在 C# 中以不同的方式執(zhí)行重載運算符。 16、字符串:C# 字符串不同于 C++ 字符串。 17、C# 中沒有全局方法和全局變量:方法和變量必須包含在類型聲明(如 class 或 struct)中。 18、C# 中沒有頭文件和 #include 指令:using 指令用于引用其他未完全限定類型名的命名空間中的類型。 19、C# 中的局部變量在初始化前不能使用。 20、析構(gòu)函數(shù):在 C# 中,不能控制析構(gòu)函數(shù)的調(diào)用時間,原因是析構(gòu)函數(shù)由垃圾回收器自動調(diào)用。 21、構(gòu)造函數(shù):與 C++ 類似,如果在 C# 中沒有提供類構(gòu)造函數(shù),則為您自動生成默認構(gòu)造函數(shù)。 該默認構(gòu)造函數(shù)將所有字段初始化為它們的默認值。 22、在 C# 中,方法參數(shù)不能有默認值。 如果要獲得同樣的效果,需使用方法重載。 c++在設(shè)計之初希望提供先進的面向?qū)ο筇匦裕瑫r提供很好的性能。 但是為了保證和以往的程序、開發(fā)人員的知識兼容,c++與c語言幾乎完全兼容。 c語言本身其實就是現(xiàn)代計算機的高級抽象,可以直接訪問地址、通過指針可以訪問幾乎任何內(nèi)存地址;堆和棧的結(jié)構(gòu)體現(xiàn)等待。 當(dāng)然c++也就具有了這樣的特性。 隨著 c++的逐步發(fā)展,generic programming 泛型編程技術(shù)和stl標(biāo)準(zhǔn)模板庫的引入,c++和c的差異越來越大。 基本上c++是為了高效地使用面向?qū)ο蠹夹g(shù)或者泛型技術(shù)編寫大規(guī)模高性能應(yīng)用程序(往往是一些相對比較底層的應(yīng)用程序)而設(shè)計的。 沒有什么語言能比C++更加貼近Windows本身了,這一點也是不可否認的。 C++更針對計算機的底層,而C#更注重對上層應(yīng)用程序的支持。 目前絕大多數(shù)的大型游戲都是用C++做的,而網(wǎng)絡(luò)應(yīng)用、應(yīng)用軟件的半壁江山被C#和JAVA所占領(lǐng)。 C#能做的,C++不一定都能做,C++能做的,C#也不一定都好做。 c#通過底層的虛擬機機制減少了c/c++語言中常常容易發(fā)生的內(nèi)存泄漏和安全性問題,代價是運行速度減慢。 同樣的由于簡化了編程語言的復(fù)雜性(c#遠遠比c++來得簡單),大大提高了開發(fā)者的效率。 另外c#具有龐大的類庫,這個優(yōu)勢是c++所不具有的。 因此c#非常合適開發(fā)企業(yè)中處理業(yè)務(wù)的應(yīng)用程序。 同時微軟所有的操作系統(tǒng)、服務(wù)器程序、桌面端程序都在向平臺統(tǒng)一。 在歷史上與次類似的情形(指微軟技術(shù))只有在微軟從16位平臺向32位平臺轉(zhuǎn)變的過程中發(fā)生過。 C# 是純面向?qū)ο笳Z言,C++ 除了面向?qū)ο螅裁嫦蜻^程。 C# 支持垃圾收集,C++ 不支持垃圾收集。 C#需要虛擬機器,C++ 不需要虛擬機器。 C# 的執(zhí)行檔是中間碼,叫做 managed code,透過 NGWS Runtime 來執(zhí)行。 除了 C#,你也可以用其它程序語言(例如 Visual Basic、C++)來作出 managed code。 C# 使用 Platform-Independent Type,C++ 的 type 會受到平臺的影響。 C#調(diào)用Win32 API的方式繁雜,C++這一點做得比它好。 但是,C#強大的網(wǎng)絡(luò)操作,代碼量大大地低于C++,我們拋棄不用Socket,改用WinInet或是MFC中的封裝好的網(wǎng)絡(luò)類,比如CHTTPFile,還是沒C#簡單。 C#的傻瓜式的類庫操作和面向?qū)ο缶幊痰耐昝捞匦裕_實讓其成為了Windows平臺上最受歡迎的語言。 C#中不通過Win32 API就那么一種方式,通過找到進程,然后Kill之,而C++中,我們完全有無數(shù)種選擇,如進程內(nèi)存填0,卸載模塊,消息洪水,句柄強制關(guān)閉,強制釋放它的堆等等,甚至注入進去,內(nèi)部Raise一個異常,它也就會結(jié)束。 保護進程,不管內(nèi)核下還是應(yīng)用層,C#肯定是做不了的,C++有自己高端的地方,其他語言無法涉足。 所以沒有用C#做的殺毒軟件就不足為奇了。 C#極其簡易的界面操作,令人看著很舒服的編碼,他有太多的地方,C++根本無法涉足。 沒人拿C++做Web Services,超級大量的數(shù)據(jù),拿垃圾回收基本上為0的C++去做,簡直就是自找麻煩。 C#的WebForm,和Jsp占據(jù)著Web的大片江山,C++不能。 C#是一門博大精深的語言,類庫強大。 C#更加注重于軟件工程的應(yīng)用,各種設(shè)計模式的使用,C++則注重于實現(xiàn)功能。 C#的前景是不錯的,我個人很看好它,MSDN 雜志每期的文章可能有8成是C#,C++不算很多,微軟的重心可能在C#上,希望C#逐漸能取代C++。 但是C++會這么容易被取代?不可能。 就像一個搞管理的,你讓他接管搞開發(fā)的人,讓他從干一樣到同時兼干這二樣,會有這么簡單么?c++的生命力至少還要7-8年,之后才會漸漸的淡出,但是只要追求自由的人存在,C++就不會消失;只要操作系統(tǒng)一天是用C++寫的,C++就不會消失。 開發(fā)數(shù)據(jù)庫,傾向于用C#,做Windows底層,我肯定是C++。 C#的Linq to Sql讓不懂?dāng)?shù)據(jù)庫的人都能去操做數(shù)據(jù)庫了,輔助一些第三方類庫,能發(fā)揮強大的威力。 完全取代C++,等操作系統(tǒng)是C#寫的,C#能開發(fā)系統(tǒng)中的一切組件的時候再說吧,至少現(xiàn)在C#還不能開發(fā)IsAPI、驅(qū)動。
C#比其它語言的優(yōu)勢 C#(讀做 C sharp)是微軟公司在去年六月發(fā)布的一種新的編程語言,并定于在微軟職業(yè)開發(fā)者論壇(PDC)上登臺亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程.但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司 windows網(wǎng)絡(luò)框架的主角.在本文中,我將考察創(chuàng)建一種新計算機語言的一般動機,并將特別指明是什么原因?qū)е铝薈#的出現(xiàn).然后我將介紹C#和它與Java,c,c++的相似之處.其次我將討論一些存在于Java和C#之間的高層次的,和基礎(chǔ)的差別.我將以衡量在用多種語言開發(fā)大型應(yīng)用程序的時候所需的知識(或者對這種知識的缺乏程度)來結(jié)束本文,而這正是和C#的一個主要戰(zhàn)略.目前,C#和還只能以C#語言規(guī)則,以及Windows 2000的一個d預(yù)覽版本,還有MSDN上迅速增多的文檔集子的形式獲得(還沒有最終定型).微軟c#語言定義主要是從C和C++繼承而來的,而且語言中的許多元素也反映了這一點.C#在設(shè)計者從C++繼承的可選選項方面比Java要廣泛一些(比如說structs),它還增加了自己新的特點(比方說源代碼版本定義).但它還太不成熟,不可能擠垮Java.C#還需要進化成一種開發(fā)者能夠接受和采用的語言.而微軟當(dāng)前為它的這種新語言大造聲勢也是值得注意的.目前大家的反應(yīng)是:這是對Java的反擊.C#更象Java一些,雖然微軟在這個問題上保持沉默.這也是意料中的事情,我覺得,因為Java近來很成功而使用Java的公司都報告說它們在生產(chǎn)效率上比C++獲得了提高所帶來的巨大影響和大家對它的廣泛接受已經(jīng)由工作于這種語言和平臺之上的程序員數(shù)量明顯的說明了(估計世界范圍內(nèi)共有兩百五十萬程序員使用Java).由這種語言寫成的應(yīng)用程序的數(shù)量是令人驚訝的并已經(jīng)滲透了每一個級別的計算,包括無線計算和移動電話(比如日本發(fā)明的Java電話).C#能夠在用戶領(lǐng)域獲得這樣的禮遇嗎?我們必須等待并觀望,就象已經(jīng)由SSI公司的CEO和主席Kalpathi S. Suresh指出來的那樣,我發(fā)現(xiàn)所有這些都是漸進的.如果C#不存在,我們總能回到Java或C和C++.這些都不完全是新技術(shù);它們在更大的意義上來說只是大公司制造的市場噱頭.我們必須給他們時間安頓下來看看這些是不是真的對IT工業(yè)有什么影響.C#從Java繼承而來的特點類:在C#中類的申明與Java很相似.這是合理的因為經(jīng)驗告訴我們Java模型工作得很好的關(guān)鍵字import已經(jīng)被替換成using,它起到了同樣的作用.一個類開始執(zhí)行的起點是靜態(tài)方法Main().下面的Hello World程序展示了基本的形式:using System;class Hello {static void Main() {(Hello, world);}}在這個例子中,System這個名字指向一個包括了基本C#實用類集合的命名空間(namespace).這個命名空間包括了Console類,它在這個例子中被用來輸出一個字符串.類可以是抽象的和不可繼承的:一個被申明成abstract的類不能被實例化;它只能被用做一個基類.C#關(guān)鍵字lock就象Java關(guān)鍵字final,它申明一個類不是抽象的,但是它也不能被用做另一個類的基類.界面:就象在Java中一樣,一個界面是一組方法集合的抽象定義.當(dāng)一個類或結(jié)構(gòu)體實現(xiàn)一個界面的時候,它必須實現(xiàn)這個界面中定義的所有方法.一個單一的類可以實現(xiàn)幾個界面.也許以后會出現(xiàn)一些微妙的差別,但是這個特點看起來與Java相比沒有變化.布爾運算:條件表達式的結(jié)果是布爾數(shù)據(jù)類型,布爾數(shù)據(jù)類型是這種語言中獨立的一種數(shù)據(jù)類型.從布爾類型到其他類型沒有直接的轉(zhuǎn)換過程.布爾常量true和false是C#中的關(guān)鍵字.錯誤處理:如Java中那樣,通過拋出和捕捉異常對象來管理錯誤處理過程.內(nèi)存管理:由底層框架進行自動內(nèi)存垃圾回收.C#從C和C++繼承的特點編譯:程序直接編譯成標(biāo)準(zhǔn)的二進制可執(zhí)行形式.如果前面的Hello World程序被保存成一個文本文件并被命名為,它將被編譯成命的可執(zhí)行程序.結(jié)構(gòu)體:一個C#的結(jié)構(gòu)體與C++的結(jié)構(gòu)體是相似的,因為它能夠包含數(shù)據(jù)申明和方法.但是,不象C++,C#結(jié)構(gòu)體與類是不同的而且不支持繼承.但是,與Java相同的是,一個結(jié)構(gòu)體可以實現(xiàn)界面.預(yù)編譯:C#中存在預(yù)編譯指令支持條件編譯,警告,錯誤報告和編譯行控制.可用的預(yù)編譯指令有:#define #undef #if #elif #else#endif#warning #error #line [] 沒有了#include 偽指令.你無法再用#define 語句對符號賦值,所以就不存在源代碼替換的概念--這些符號只能用在#if和#elif偽指令里.在#line偽指令里的數(shù)字(和可選的名字)能夠修改行號還有#warning和#error輸出結(jié)果的文件名.操作符重載:一些操作符能夠被重載,而另一些則不能.特別的是,沒有一個賦值運算符能夠被重載.能夠被被重載的單目操作符是:+ - ! ~ ++ -- true false 能夠被重載的二元運算符是:+ - * / % & | ^ << >> == != > < >= <=C#獨有的特點C#最引人入勝的地方是它和Java的不同,而不是相似的地方.這一節(jié)(和這個系列第二部分的大部分地方)講述了C#實現(xiàn)的和Java不同的地方或者Java根本沒有的特點.中間代碼:微軟在用戶選擇何時MSIL應(yīng)該編譯成機器碼的時候是留了很大的余地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機器碼.它也明白許多--如果不是大多數(shù)的話--程序員認為Java程序要不可避免的比C編寫的任何東西都要慢.而這種實現(xiàn)方式?jīng)Q定了基于MSIL的程序(指的是用C#,Visual Basic,Managed C++--C++的一個符合CLS的版本--等語言編寫的程序)將在性能上超過解釋性的Java代碼.當(dāng)然,這一點還需要得到事實證明,因為C#和其他生成MSIL的編譯器還沒有發(fā)布.但是Java JIT編譯器的普遍存在使得Java和C#在性能上相對相同.象C#是編譯語言而Java是解釋性的,之類的聲明只是商業(yè)技巧的中間代碼和MSIL都是中間的匯編形式的語言,它們在運行時或其它的時候被編譯成機器代碼.命名空間中的申明:當(dāng)你創(chuàng)建一個程序的時候,你在一個命名空間里創(chuàng)建了一個或多個類.同在這個命名空間里(在類的外面)你還有可能聲明界面,枚舉類型和結(jié)構(gòu)體.必須使用using關(guān)鍵字來引用其他命名空間的內(nèi)容.基本的數(shù)據(jù)類型:C#擁有比C,C++或者Java更廣泛的數(shù)據(jù)類型.這些類型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一樣,所有這些類型都有一個固定的大小.又象C和C++一樣,每個數(shù)據(jù)類型都有有符號和無符號兩種類型.與Java相同的是,一個字符變量包含的是一個16位的Unicode字符.C#新的數(shù)據(jù)類型是decimal數(shù)據(jù)類型,對于貨幣數(shù)據(jù),它能存放28位10進制數(shù)字.兩個基本類:一個名叫object的類是所有其他類的基類.而一個名叫string的類也象object一樣是這個語言的一部分.作為語言的一部分存在意味著編譯器有可能使用它--無論何時你在程序中寫入一句帶引號的字符串,編譯器會創(chuàng)建一個string對象來保存它.參數(shù)傳遞:方法可以被聲明接受可變數(shù)目的參數(shù).缺省的參數(shù)傳遞方法是對基本數(shù)據(jù)類型進行值傳遞關(guān)鍵字可以用來強迫一個變量通過引用傳遞,這使得一個變量可以接受一個返回值關(guān)鍵字也能聲明引用傳遞過程,與ref不同的地方是,它指明這個參數(shù)并不需要初始值.與COM的集成:C#對Windows程序最大的賣點可能就是它與COM的無縫集成了,COM就是微軟的Win32組件技術(shù).實際上,最終有可能在任何語言里編寫COM客戶和服務(wù)器端.C#編寫的類可以子類化一個以存在的COM組件;生成的類也能被作為一個COM組件使用,然后又能使用,比方說,JScript語言子類化它從而得到第三個COM組件.這種現(xiàn)象的結(jié)果是導(dǎo)致了一個運行環(huán)境的產(chǎn)生,在這個環(huán)境里的組件是網(wǎng)絡(luò)服務(wù),可用用任何語言子類化.索引下標(biāo):一個索引與屬性除了不使用屬性名來引用類成員而是用一個方括號中的數(shù)字來匿名引用(就象用數(shù)組下標(biāo)一樣)以外是相似的 class ListBox: Control {private string[] items;public string this[int index] {get {return items[index];}set {items[index] = value;Repaint();}}} 可以用一個循環(huán)器來匿名引用字符串內(nèi)部數(shù)組成員,就象下面這樣:ListBox listBox = ...;listBox[0] = hello;(listBox[0]);代理和反饋:一個代理對象包括了訪問一個特定對象的特定方法所需的信息.只要把它當(dāng)成一個聰明的方法指針就行了.代理對象可以被移動到另一個地方,然后可以通過訪問它來對已存在的方法進行類型安全的調(diào)用.一個反饋方法是代理的特例關(guān)鍵字用在將在事件發(fā)生的時候被當(dāng)成代理調(diào)用的方法聲明中.
內(nèi)容聲明:
1、本站收錄的內(nèi)容來源于大數(shù)據(jù)收集,版權(quán)歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請聯(lián)系我們進行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請聯(lián)系我們進行舉報處理!
4、本文地址:http://www.lmxpnzry.com/article/d34e829f85637ce82a50.html,復(fù)制請保留版權(quán)鏈接!
簡介Java運行時環(huán)境,JRE,是Java應(yīng)用程序運行和執(zhí)行所需的軟件組件,它包含Java虛擬機,JVM,,用于執(zhí)行Java字節(jié)碼,以及其他支持庫和資源,JRE在跨平臺環(huán)境中的可用性使其成為開發(fā)人員在各種操作系統(tǒng)上部署Java應(yīng)用程序的寶貴工具,JRE的版本Oracle發(fā)布了兩種類型的JRE,JDK附帶的JRE,此JRE包含在Java...。
技術(shù)教程 2024-09-27 18:08:47
AndroidSDK是一個開發(fā)環(huán)境,它提供了開發(fā)和測試Android應(yīng)用程序所需的一切工具,本指南將引導(dǎo)您一步一步地安裝最新版本的AndroidSDK,包括Android12,先決條件具有至少8GBRAM和20GB可用磁盤空間的計算機具有至少Java8版本的Java運行時環(huán)境,JRE,步驟1,下載AndroidStudioAndroi...。
最新資訊 2024-09-27 09:34:30
簡介在Java編程語言中,類是代碼組織和管理的基本單位,類提供了封裝性、抽象性和繼承性,使程序員能夠構(gòu)建模塊化、可重用和易于維護的應(yīng)用程序,其中...。
本站公告 2024-09-25 16:25:08
概述Angular是一個用于構(gòu)建Web應(yīng)用程序和移動應(yīng)用程序的開源、基于TypeScript的框架,它由Google開發(fā)和維護,最初于2010年發(fā)布,Angular是一個模塊化框架,它允許開發(fā)人員使用組件來構(gòu)建應(yīng)用程序,組件是可重用的代碼模塊,它們表示應(yīng)用程序界面的不同部分,Angular還提供了許多內(nèi)置服務(wù),包括路由、HTTP通信和...。
本站公告 2024-09-24 19:43:41
在編程中,了解如何準(zhǔn)確測量字符串的字符和字節(jié)數(shù)至關(guān)重要,這有助于優(yōu)化內(nèi)存使用、提高性能并確保字符串處理任務(wù)的正確性,本文將指導(dǎo)您了解字符串測...。
技術(shù)教程 2024-09-15 04:46:22
高級用例,您可以創(chuàng)建用戶體驗出色、視覺上吸引人的網(wǎng)頁布局,掌握position屬性將使您能夠構(gòu)建響應(yīng)迅速、交互良好的網(wǎng)站,讓用戶參與其中并留下深刻印象,...。
最新資訊 2024-09-14 14:49:28
簡介Trim函數(shù)是一個強大的字符串操作函數(shù),它可以從字符串中刪除前導(dǎo)和尾隨空白字符,它在各種編程語言和應(yīng)用場景中都得到了廣泛應(yīng)用,精通Trim函數(shù)將使你能夠,清除用戶輸入中的多余空格標(biāo)準(zhǔn)化文本數(shù)據(jù)以進行比較和處理提高字符串操作的效率和可靠性Trim函數(shù)的語法Trim函數(shù)的語法因編程語言而異,但其基本用法如下,trim,string,其...。
技術(shù)教程 2024-09-13 03:43:26
快速訪問功能可以讓您輕松返回頁面的頂部,方便地查找信息,如何使用快速訪問滾動到頁面的任何位置,點擊右下角的,返回頂部,按鈕,該按鈕將帶您回到頁面的頂部,快速訪問的好處快速訪問功能提供了以下好處,輕松返回頁面頂部,不必再手動滾動返回頁面頂部,節(jié)省時間和精力,方便查找信息,快速訪問功能可以幫助您快速瀏覽頁面,找到所需的信息,提高生產(chǎn)力,快...。
最新資訊 2024-09-10 16:36:50
序言網(wǎng)絡(luò)通信是現(xiàn)代計算的重要組成部分,在UNIX操作系統(tǒng)中,網(wǎng)絡(luò)編程是一個強大的工具,可以讓我們創(chuàng)建和管理網(wǎng)絡(luò)應(yīng)用程序,本文將介紹UNIX網(wǎng)絡(luò)編程的基礎(chǔ)知識,從基礎(chǔ)概念到高級技巧,第1章,網(wǎng)絡(luò)基礎(chǔ)1.1網(wǎng)絡(luò)架構(gòu)網(wǎng)絡(luò)由計算機、交換機和路由器等設(shè)備組成,它們通過電纜或無線連接,計算機使用IP地址進行通信,就像郵寄信件時使用的物理地址一樣,...。
互聯(lián)網(wǎng)資訊 2024-09-10 09:59:30
什么是單片機,單片機是一種微型計算機,其所有的功能都集成在一塊芯片上,它通常用于嵌入式系統(tǒng)中,用于控制各種電器設(shè)備和機器,什么是C語言,C語言是一種廣泛用于單片機編程的高級編程語言,它以其高效的代碼、廣泛的庫支持和可移植性而聞名,為什么使用C語言,高效的代碼,C語言產(chǎn)生緊湊且高效的代碼,這對于單片機等資源有限的系統(tǒng)至關(guān)重要,廣泛的庫支...。
互聯(lián)網(wǎng)資訊 2024-09-10 08:14:08
在電子商務(wù)中,購物車是至關(guān)重要的組成部分,它使客戶能夠選擇和購買商品,為了提供高效和無縫的購物體驗,購物車代碼必須與支付網(wǎng)關(guān)和物流服務(wù)無縫集成,支付網(wǎng)關(guān)集成支付網(wǎng)關(guān)是處理在線交易并確保安全付款的平臺,在購物車中集成支付網(wǎng)關(guān)至關(guān)重要,因為它允許客戶使用各種支付方式完成購買,支付網(wǎng)關(guān)集成涉及以下步驟,選擇支付網(wǎng)關(guān),有多種支付網(wǎng)關(guān)可用,重要...。
互聯(lián)網(wǎng)資訊 2024-09-06 08:14:13
對于初學(xué)者來說,網(wǎng)站開發(fā)可能是一項艱巨且耗時的任務(wù),但是,有了內(nèi)容管理系統(tǒng),CMS,,事情會變得簡單得多,CMS是一種軟件,可讓您輕松創(chuàng)建、管理和更新網(wǎng)站內(nèi)容,而無需復(fù)雜的編程知識,織夢CMS是國內(nèi)最受歡迎的開源CMS之一,因其強大功能、易用性和廣泛的可擴展性而備受推崇,在本教程中,我們將引導(dǎo)您完成織夢CMS源碼下載和安裝的詳細步驟,...。
互聯(lián)網(wǎng)資訊 2024-09-05 13:58:13