[原文出處忘記了,復(fù)制了些對(duì)我有幫助的句子記下來(lái),供以后查看]
1.1 什么是.NET Framework
1.1.2 如何用.NET Framework編寫應(yīng)用程序
使用.NET Framework編寫應(yīng)用程序,就是使用.NET代碼庫(kù)編寫代碼(使用支持Framework的任何一種語(yǔ)言)。VS是一種強(qiáng)大的集成開(kāi)發(fā)環(huán)境,支持C#(以及托管和非托管C++、Visual Basic和其他一些語(yǔ)言)。這個(gè)環(huán)境的優(yōu)點(diǎn)是便于把.NET功能集成到代碼中。為了執(zhí)行C#代碼,必須把它們轉(zhuǎn)換為目標(biāo)操作系統(tǒng)能夠理解的語(yǔ)言,即本機(jī)代碼,這種轉(zhuǎn)換稱為編譯代碼,由編譯器執(zhí)行。但在.NET Framework下,這個(gè)過(guò)程分為兩個(gè)階段。
1. MSIL和JIT
在編譯使用.NET Framework庫(kù)的代碼時(shí),不是立即創(chuàng)建操作系統(tǒng)特定的本機(jī)代碼,而是把代碼編譯為Microsoft中間語(yǔ)言(Microsoft Intermediate Language,MSIL)代碼,這些代碼不專用于任何一種操作系統(tǒng),也不專用于C#。其他.NET語(yǔ)言,如Visual Basic .NET也可以在第一階段編譯為這種語(yǔ)言,當(dāng)使用VS開(kāi)發(fā)C#應(yīng)用程序時(shí),編譯過(guò)程就由VS完成。
顯然,要執(zhí)行應(yīng)用程序,必須完成更多的工作,這是Just-In-Time (JIT)編譯器的任務(wù),它把MSIL編譯為專用于OS和目標(biāo)機(jī)器結(jié)構(gòu)的本機(jī)代碼。這樣OS才能執(zhí)行應(yīng)用程序。這里編譯器的名稱Just-In-Time反映了MSIL僅在需要時(shí)才編譯的事實(shí)。顧名思義,JIT編譯器使用MSIL代碼,而MSIL代碼是獨(dú)立于機(jī)器、操作系統(tǒng)和CPU的。目前有幾種JIT編譯器,每種編譯器都用于不同的結(jié)構(gòu),我們總能找到一個(gè)合適的編譯器創(chuàng)建所需的本機(jī)代碼。
2. 程序集
在編譯應(yīng)用程序時(shí),所創(chuàng)建的MSIL代碼存儲(chǔ)在一個(gè)程序集中,程序集包括可執(zhí)行的應(yīng)用程序文件(這些文件可以直接在Windows上運(yùn)行,不需要其他程序,其擴(kuò)展名是.exe)和其他應(yīng)用程序使用的庫(kù)(其擴(kuò)展名是.dll)。
除了包含MSIL外,程序集還包含元信息(即程序集中包含的數(shù)據(jù)的信息,也稱為元數(shù)據(jù))和可選的資源(MSIL使用的其他數(shù)據(jù),例如聲音文件和圖片)。
3. 托管代碼
在把代碼編譯為MSIL,再用JIT編譯器把它編譯為本機(jī)代碼后,CLR的任務(wù)還沒(méi)有全部完成。用.NET Framework編寫的代碼在執(zhí)行(這個(gè)階段通常稱為運(yùn)行時(shí)(runtime))時(shí)是托管的。即CLR管理著應(yīng)用程序,其方式是管理內(nèi)存、處理安全性,以及允許進(jìn)行跨語(yǔ)言調(diào)試等。
4. 垃圾回收
托管代碼最重要的一個(gè)功能是垃圾回收(garbage collection)。
在繼續(xù)學(xué)習(xí)之前,先總結(jié)一下上述創(chuàng)建.NET應(yīng)用程序所需要的步驟:
(1) 使用某種.NET兼容語(yǔ)言(如C#)編寫應(yīng)用程序代碼,如圖1-1所示。
(2) 把代碼編譯為MSIL,存儲(chǔ)在程序集中,如圖1-2所示。
(3) 在執(zhí)行代碼時(shí)(如果這是一個(gè)可執(zhí)行文件,就自動(dòng)運(yùn)行,或者在其他代碼使用它時(shí)運(yùn)行),首先必須使用JIT編譯器將代碼編譯為本機(jī)代碼,如圖1-3所示。
(4) 在托管的CLR環(huán)境下運(yùn)行本機(jī)代碼,以及其他應(yīng)用程序或過(guò)程,如圖1-4所示。
6. 鏈接
編譯為MSIL的C#代碼不一定包含在單獨(dú)的文件中,可以把應(yīng)用程序代碼放在多個(gè)源代碼文件中,再把它們編譯到一個(gè)程序集中,這個(gè)過(guò)程稱為鏈接。
C#是可用于創(chuàng)建要運(yùn)行在.NET CLR上的應(yīng)用程序的語(yǔ)言之一,它從C和C++語(yǔ)言演化而來(lái),是Microsoft專門為使用.NET平臺(tái)而創(chuàng)建的。C#的優(yōu)點(diǎn)是,它是惟一為.NET Framework設(shè)計(jì)的語(yǔ)言,是在移植到其他操作系統(tǒng)上的.NET版本中使用的主要語(yǔ)言。
1.2.1 用C#能編寫什么樣的應(yīng)用程序
● Windows應(yīng)用程序 這些應(yīng)用程序如Microsoft Office,使用.NET Framework的Windows Forms模塊就可以生成這種應(yīng)用程序。Windows Form模塊是一個(gè)控件庫(kù),其中的控件(例如按鈕、工具欄、菜單等)可以用于建立Windows用戶界面(UI)。
● Web應(yīng)用程序 這些是Web頁(yè),可以通過(guò)任何Web瀏覽器查看。.NET Framework包括一個(gè)動(dòng)態(tài)生成Web內(nèi)容的強(qiáng)大系統(tǒng),允許個(gè)性化、實(shí)現(xiàn)安全性等。這個(gè)系統(tǒng)叫作Active Server Pages.NET (ASP.NET),我們可以使用C#通過(guò)Web Forms 創(chuàng)建ASP.NET應(yīng)用程序。
● Web服務(wù) 這是創(chuàng)建各種分布式應(yīng)用程序的新方式,使用Web服務(wù)可以通過(guò)Internet虛擬交換數(shù)據(jù)。無(wú)論使用什么語(yǔ)言創(chuàng)建Web服務(wù),也無(wú)論Web服務(wù)駐留在什么系統(tǒng)上,都使用一樣簡(jiǎn)單的語(yǔ)法。
這些類型也需要某種形式的數(shù)據(jù)庫(kù)訪問(wèn),這可以通過(guò).NET Framework的Active Data Objects.NET(ADO.NET)部分來(lái)實(shí)現(xiàn)。也可以使用許多其他資源,例如創(chuàng)建聯(lián)網(wǎng)組件、輸出圖形、執(zhí)行復(fù)雜數(shù)學(xué)任務(wù)的工具。
1.2.2 C#與java中的不同之處
1. 調(diào)用子類方法與JAVA有變,如下程序片段,其中B是A的子類,speak()方法在B中得到了重寫:
B b = new B();
A a = b;
b.speak();
a.speak();
在JAVA中調(diào)用的都是b對(duì)象的speak()方法,因?yàn)閍實(shí)際上也是指向b對(duì)象;而在c#中則不同,如果speak()是普通方法,則a.speak()調(diào)用的是a中的方法;若speak是虛方法,則調(diào)用的是b中的speak()方法。
2. visual studio 2005中“調(diào)試”→開(kāi)始執(zhí)行(Ctrl+F5)為灰色,不能用的解決辦法:
在右側(cè)的“解決方案”點(diǎn)右鍵→新建項(xiàng)目→已有項(xiàng)目,選擇你本地的項(xiàng)目如ConsoleApplication1.sln,再選擇你要運(yùn)行的類,“開(kāi)始執(zhí)行”項(xiàng)就好使了。
3. c#方法重載:
1. 對(duì)普通方法的重載:
類中兩個(gè)以上的方法,取相同的名字,只要使用的參數(shù)類型或者參數(shù)個(gè)數(shù)不同,就實(shí)現(xiàn)了對(duì)方法的重載。這種重載方式與JAVA是相同的。
4. 對(duì)虛方法重載:
在派生類中重新定義此虛方法時(shí),要求方法名稱、返回值類型、參數(shù)表的個(gè)數(shù)、類型、順序都必須一致,并且要求在聲明中加上override關(guān)鍵字,而且不能有new,static或virtual等修飾符。
5. 方法密封:
功能類似于JAVA語(yǔ)言的final,但語(yǔ)法不同。必須是對(duì)虛方法重寫時(shí)才可以密封,所以sealed總是和override一起出現(xiàn)。下面這個(gè)方法將會(huì)出現(xiàn)錯(cuò)誤
1 class C
2 {
3 sealed public void speak()
4 {
5 Console.WriteLine("I am c");
6 }
7
8 }
9
6. 屬性與域:
c#中的域與JAVA的域概念相同;c#中的每個(gè)屬性不能直接用對(duì)象來(lái)訪問(wèn),必須通過(guò)它的set和get方法,它的set和get方法是定義在對(duì)象的屬性里面的,屬性的定義與訪問(wèn)與JAVA有很大的不同,其格式如下:
1 class SealedTest
2 {
3 static void Main()
4 {
5 C c = new C();
6 c.xxx = "yangay";
7 Console.WriteLine(c.xxx);
8 }
9 }
10 }
11 ---------------
12 class C
13 {
14 string userName;
15 public string xxx//為了說(shuō)明這里的名稱可以與userName名無(wú)關(guān),起了XXX。
16 {
17 get
18 {
19 return userName;
20 }
21 set
22 {
23 if (userName != value)
24 {
25 userName = value;
26 }
27 }
28
29 }
30 }
31
32
posted on 2007-08-30 17:16
楊愛(ài)友 閱讀(307)
評(píng)論(0) 編輯 收藏 所屬分類:
java相關(guān)技術(shù)