第一章C#簡(jiǎn)介_第1頁(yè)
第一章C#簡(jiǎn)介_第2頁(yè)
第一章C#簡(jiǎn)介_第3頁(yè)
第一章C#簡(jiǎn)介_第4頁(yè)
第一章C#簡(jiǎn)介_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第一章 c#簡(jiǎn)介l c#和.NET兩項(xiàng)技術(shù)的含義、作用和相互關(guān)系,先說.NET Framework。1.1 .NET Framework的含義.NET Framework框架是Microsoft微軟為開發(fā)應(yīng)用程序而創(chuàng)建的一個(gè)平臺(tái)。盡管.NET Framework的Microsoft版本運(yùn)行在Windows操作系統(tǒng)上,但以后將推出運(yùn)行在其他操作系統(tǒng)上的版本,例如Mono,它是.NET Framework的開源版本(包含C#編譯器),可以運(yùn)行在包括各種Linux版本和Mac OS操作系統(tǒng)上。另外,還可以在個(gè)人數(shù)字助手(PDA)類設(shè)備和一些智能電話上使用Microsoft .NET Framewor

2、k(基本上是完整.NET Framework的一個(gè)子集)。 .NET Framework的設(shè)計(jì)方式確保它可以用于很多語言,包括C#,以及C+、Visual Basic、Jscript,甚至一些舊語言,如COBOL。為此,還推出了這些語言的NET版本,目前還在推出更多版本。所有這些語言都可以訪問.NET Framework,它們彼此之間還可以通信。C#開發(fā)人員可以使用Visual Basic程序員編寫的代碼,反之亦然。1.1.1NET Framework的內(nèi)容 .NET Framework包含一個(gè)非常大的代碼庫(kù),可以在客戶語言(如C#)中通過面向?qū)ο缶幊碳夹g(shù)(OOP)來使用這些代碼。這個(gè)庫(kù)分為多

3、個(gè)不同模塊,這樣就可以根據(jù)希望得到的結(jié)果來選擇使用其中的各個(gè)部分。例如,一個(gè)模塊包含Windows應(yīng)用程序的構(gòu)件,另一個(gè)模塊包含網(wǎng)絡(luò)編程的代碼塊,還有一個(gè)模塊包含Web開發(fā)的代碼塊。一些模塊還可以分為更具體的子模塊,例如,在Web開發(fā)模塊中,有用于建立Web服務(wù)的子模塊。 其目的是,不同操作系統(tǒng)可以根據(jù)自己的特性,支持其中的部分或全部模塊。例如,PDA支持所有的核心.NET功能,但不需要某些更高級(jí)的模塊。 部分.NET Framework庫(kù)定義了一些基本類型。類型是數(shù)據(jù)的一種表達(dá)方式,指定其中最基礎(chǔ)的部分(如32位帶符號(hào)的整數(shù)),以便使用.NET Framework在各種語言之間進(jìn)行交互操作。

4、這稱為通用類型系統(tǒng)(Common Type System,CTS)。 除了提供這個(gè)庫(kù)以外,.NET Framework還包含.NET 公共語言運(yùn)行庫(kù)(Common Language Runtime,CLR),它負(fù)責(zé)管理用.NET 庫(kù)開發(fā)的所有應(yīng)用程序的執(zhí)行。.NET Framework通用類型系統(tǒng)(Common Type System,CTS)公共語言運(yùn)行庫(kù)(Common Language Runtime,CLR)1.1.2.NET Framework如何編寫應(yīng)用程序 使用.NET Framework編寫應(yīng)用程序,就是使用.NET 代碼庫(kù)編寫代碼(使用支持Framework的任何一種語言)。V

5、S是一種集成開發(fā)環(huán)境,便于把.NET 功能集成到代碼中。為了執(zhí)行C#代碼,必須把他們轉(zhuǎn)換為目標(biāo)操作系統(tǒng)能夠理解的語言,即本機(jī)代碼(native code)。這種轉(zhuǎn)換稱為編譯代碼,由編譯器執(zhí)行。但在.NET Framework下,此過程包含兩個(gè)階段。l CIL和JIT 在編譯使用.NET Framework庫(kù)的代碼時(shí),不是立即創(chuàng)建專用于操作系統(tǒng)的本機(jī)代碼,而是把代碼編譯為通用中間語言(Common Intermediate Language,CIL)代碼,這些代碼并非專門用于任何一種操作系統(tǒng),也非專門用于C#。其他.NET 語言,如Visual Basic.NET 也可以在第一階段編譯為這種語言

6、,開發(fā)C#應(yīng)用程序時(shí),這個(gè)編譯步驟由VS或VCE完成。 顯然,要執(zhí)行應(yīng)用程序,必須完成更多工作,這是Just-In-Time(JIT)編譯器的任務(wù),它把CIL編譯為專用于OS操作系統(tǒng)和目標(biāo)機(jī)器結(jié)構(gòu)的本機(jī)代碼。這樣OS才能執(zhí)行應(yīng)用程序。這里編譯器的名稱Just-In-Time反映了CIL代碼僅在需要時(shí)才編譯的事實(shí)。 過去,常常需要把代碼編譯為幾個(gè)應(yīng)用程序,每個(gè)應(yīng)用程序都用于特定的操作系統(tǒng)和CPU結(jié)構(gòu)。這通常是一種優(yōu)化形式(例如,為了讓代碼在AMD芯片組上運(yùn)行的更快),而且有時(shí)是非常重要的。現(xiàn)在就不不要了,顧名思義,JIT編譯器使用CIL代碼,而CIL代碼是獨(dú)立于計(jì)算機(jī)、操作系統(tǒng)和CPU的。目前有

7、幾種JIT編譯器,每種都用于不同的結(jié)構(gòu),總有一個(gè)合適的編譯器創(chuàng)建所需的本機(jī)代碼。編譯通用中間語言(Common Intermediate Language,CIL)由VS或VCE完成Just-In-Time(JIT)編譯器,僅在需要時(shí)才編譯l 程序集 在編譯應(yīng)用程序時(shí),創(chuàng)建的CIL代碼存儲(chǔ)在一個(gè)程序集中。程序集包括可執(zhí)行的應(yīng)用程序文件(這些文件可以直接在Windows上運(yùn)行,不需要其他程序,擴(kuò)展名是.exe)和其他應(yīng)用程序使用的庫(kù)(擴(kuò)展名是.dll)。 除了CIL外,程序集還包含信息(即數(shù)據(jù)的信息,也稱元數(shù)據(jù))和可選的資源(CIL使用的其他數(shù)據(jù),如:聲音文件和圖片)。元信息允許程序集是完全自描

8、述的元信息可以封裝到程序集。不需要其他信息就可以使用程序集。因此,部署應(yīng)用程序就很簡(jiǎn)單,只需把文件復(fù)制到遠(yuǎn)程計(jì)算機(jī)上的目錄下即可。因?yàn)椴恍枰繕?biāo)系統(tǒng)上的其他信息,運(yùn)行可執(zhí)行文件即可(假定安裝了.NET CLR)。 當(dāng)然,不必把運(yùn)行應(yīng)用程序所需的所有信息都安裝到一個(gè)地方??梢跃帉懸恍┐a為多個(gè)應(yīng)用程序所用,此時(shí),通常把這些可重用的代碼放在它們都可以訪問的地方。在.NET Framework中,這個(gè)地方是全局序集緩存(Global Assembly Cache,GAC),把代碼放在這個(gè)緩存中是很簡(jiǎn)單的,只需把代碼所在的程序集放在該緩存所在的目錄即可。l 托管代碼 在將代碼編譯為CIL,再用JIT編

9、譯器將它編譯為本機(jī)代碼后,CLR的任務(wù)還沒有全部完成,還需要管理正在執(zhí)行的用.NET Framework編寫的代碼(這個(gè)執(zhí)行代碼的階段通常稱為運(yùn)行時(shí)(runtime)。即CLR管理著應(yīng)用程序,其方式是管理內(nèi)存、處理安全性及允許跨語言調(diào)試等。相反,不受CLR控制運(yùn)行的應(yīng)用程序?qū)儆诜峭泄茴愋?,某些語言如C+可以編寫這類應(yīng)用程序,如訪問操作系統(tǒng)的低級(jí)功能。但在C#中,只能編寫在托管環(huán)境下運(yùn)行的代碼,CLR的托管功能,是讓.NET 自己與操作系統(tǒng)進(jìn)行交互。l 垃圾回收 托管代碼最重要的功能之一是垃圾回收(garbage collection)。這種.NET 方法可確保應(yīng)用程序不再使用某些內(nèi)存時(shí),就完全

10、釋放它們。在.NET 推出以前,這項(xiàng)工作主要由程序員負(fù)責(zé),代碼中幾個(gè)簡(jiǎn)單失誤會(huì)把大塊內(nèi)存分配到錯(cuò)誤的地方,使這些內(nèi)存神秘失蹤。這通常意味著計(jì)算機(jī)速度逐漸變慢,最終導(dǎo)致系統(tǒng)崩潰。 .NET 垃圾回收會(huì)定期檢查計(jì)算機(jī)內(nèi)存,從中刪除不再需要的內(nèi)容。它不設(shè)置時(shí)間幀,可能一秒鐘內(nèi)會(huì)進(jìn)行上千次的檢查,也可能幾秒鐘才檢查一次,或者隨時(shí)進(jìn)行檢查,但一定會(huì)進(jìn)行檢查。注意,因?yàn)樵诓豢深A(yù)知的時(shí)間執(zhí)行這項(xiàng)工作,所以在設(shè)計(jì)應(yīng)用程序時(shí),需要許多內(nèi)存才能運(yùn)行的代碼應(yīng)自己執(zhí)行這樣的檢查,而不是坐等垃圾回收,這并不難。l 把它們組合在一起總結(jié)上述創(chuàng)建.NET應(yīng)用程序的步驟1. 使用某種.NET兼容語言(如C#)編寫應(yīng)用程序代碼

11、。如圖1-1所示。2. 把代碼編譯為CIL,存儲(chǔ)在程序集中,如圖1-2所示。C#代碼C#應(yīng)用程序代碼編譯程序集圖1-1圖1-2 3. 在執(zhí)行代碼時(shí)(如果這是一個(gè)可執(zhí)行行文件,就自動(dòng)運(yùn)行,或者在其他代碼使用它時(shí)運(yùn)行),首先必須使用JIT編譯器將代碼編譯為本機(jī)代碼,如圖1-3所示。程序集JIT編譯本機(jī)代碼圖1-3 4 在托管的CLR環(huán)境下運(yùn)行本機(jī)代碼,以及其他應(yīng)用程序或進(jìn)程,如圖1-4所示。系統(tǒng)運(yùn)行庫(kù).NET CLR本機(jī)代碼本機(jī)代碼本機(jī)代碼圖1-4l 連接 在上述過程中還有一點(diǎn)要注意。在第2步中編譯為CIL的C#代碼不一定包含在單獨(dú)文件中,可以把應(yīng)用程序代碼放在多個(gè)源代碼文件中,再把它們編譯到一個(gè)

12、程序集中。這個(gè)過程稱為連接(linking),是非常有用的。原因是處理幾個(gè)較小的文件比處理一個(gè)大文件要簡(jiǎn)單的多??梢园堰壿嬌舷嚓P(guān)的代碼分解到一個(gè)文件中,以便單獨(dú)進(jìn)行處理,這也更易于在需要時(shí)找到特定的代碼塊,讓開發(fā)小組把編譯工作分解為一些可管理的塊,讓每個(gè)人編寫一小塊代碼,而不會(huì)破壞已編寫好的代碼塊部分或其他人正在處理的部分。1.2C#的含義 如上所述,C#是用于創(chuàng)建運(yùn)行于.NET CLR上的應(yīng)用程序的語言之一,它從C和C+語言演化而來,是Microsoft專門為使用.NET平臺(tái)而創(chuàng)建的。吸取了其他語言的許多優(yōu)點(diǎn)。 使用C#開發(fā)應(yīng)用程序比使用C+簡(jiǎn)單,因其語法比較簡(jiǎn)單。但,在C+中能完成的任務(wù)幾

13、乎都能用C#完成。比如,C#中與C+高級(jí)功能等價(jià)的功能(如直接訪問和處理系統(tǒng)內(nèi)存),只能在標(biāo)記為“不安全(unsafe)”的代碼中使用。這個(gè)高級(jí)編程技術(shù)存在潛在威脅(正如它的名稱所暗示的),因?yàn)樗赡芨采w系統(tǒng)中重要的內(nèi)存塊,導(dǎo)致嚴(yán)重后果。 C#代碼常比C+略長(zhǎng)一些。這是因?yàn)镃#是一種類型安全的語言(與C+不同)。在外行人看來,這表示一旦為某個(gè)數(shù)據(jù)指定了類型,就不能轉(zhuǎn)換為另一個(gè)不相關(guān)的類型。所以,來類型之間轉(zhuǎn)換時(shí),必須遵守嚴(yán)格的規(guī)則。執(zhí)行相同的任務(wù)時(shí),用C#編寫的代碼通常比用C+編寫的代碼長(zhǎng)。但C#代碼更健壯,調(diào)試起來也比較簡(jiǎn)單,NET始終可以隨時(shí)跟蹤數(shù)據(jù)的類型。 C#只是用于NET開發(fā)的一種語言。其優(yōu)點(diǎn)是:唯一徹頭徹尾為.NET Framework設(shè)計(jì)的語言,是在移植到其他操作系統(tǒng)上的.NET版本中使用的主要語言。要使諸如VB.NET的語言盡可能類似于其以前的語言,且仍遵循CLR,就不能完全

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論