電子教案第3章C2008中面向過程高級(jí)元素_第1頁
電子教案第3章C2008中面向過程高級(jí)元素_第2頁
電子教案第3章C2008中面向過程高級(jí)元素_第3頁
電子教案第3章C2008中面向過程高級(jí)元素_第4頁
電子教案第3章C2008中面向過程高級(jí)元素_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 C# 2008中面向過程的高級(jí)元素 在第2章里,介紹了C# 2008語言中簡(jiǎn)單的變量類型,但是只有這些數(shù)據(jù)類型還是不夠的。本章將介紹兩種常用而又簡(jiǎn)單的類型,即結(jié)構(gòu)體和枚舉。 同時(shí)在本章中,還將介紹函數(shù)的的相關(guān)內(nèi)容。函數(shù)是C# 2008程序中的重要組成部分,用于實(shí)現(xiàn)部分特定的功能。函數(shù)所涉及到的內(nèi)容非常多,函數(shù)的使用也非常靈活,本章將要介紹函數(shù)中最基本和最重要的知識(shí)。3.1 結(jié)構(gòu)體 當(dāng)需要將不同類型的簡(jiǎn)單數(shù)據(jù)組合成一個(gè)有機(jī)的整體時(shí),選擇結(jié)構(gòu)體無疑是一個(gè)聰明的選擇。例如下面的情況: 表示平面上的一個(gè)點(diǎn)。 表示由兩個(gè)數(shù)(分子和分母)組成的分?jǐn)?shù)。 通訊錄里包含姓名、電話和地址的記錄。 結(jié)構(gòu)通常

2、存放的類型必須是在內(nèi)存中有固定大小,即內(nèi)建的基本類型int32、int64、double等。3.1.1 結(jié)構(gòu)體的概念 【本節(jié)示例參考:示例代碼Chap03Struct】 生成結(jié)構(gòu)的過程,就是把一系列相關(guān)的變量組織成為一個(gè)單一實(shí)體的過程。每一個(gè)變量稱為結(jié)構(gòu)的成員。定義結(jié)構(gòu)的方式如下: struct_modifier struct struct_name Data members /數(shù)據(jù)成員 Methods /方法 Nested type definitions /嵌套類型 3.1.2 結(jié)構(gòu)體的特點(diǎn) 在結(jié)構(gòu)體里包含的成員類型沒有限制,可以相同也可以不同。例如可以在上一小節(jié)的PhoneBook例子中

3、,添加一個(gè)int類型的成員。 public struct PhoneBook Public string name; Public string age; Public string phone; Public string address; Public int address_number; 3.2 枚舉 本節(jié)將介紹一種常用而又簡(jiǎn)單的變量類型枚舉。枚舉是一個(gè)指定的常數(shù),其基礎(chǔ)類型可以是除char以外的任何整型。3.2.1 枚舉的概念 【本節(jié)示例參考:示例代碼Chap03Enum】 枚舉實(shí)際上是為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號(hào),即創(chuàng)建一系列的別名,有了別名可以讓程序更容易理解

4、。定義的格式如下: enum_modifiers enum enum_name name1 = value1, name2 = value2, nameN = valueN 3.2.2 應(yīng)用枚舉 【本節(jié)示例參考:示例代碼Chap03Enum2】 訪問枚舉元素的方式很簡(jiǎn)單,只需要輸入枚舉的名稱、一個(gè)句號(hào)和字段的名稱就可以了。例如: MyDirection md = MyDirection.East;3.3 函數(shù) 迄今為止,所看到的代碼都是以代碼塊的形式出現(xiàn)的,如果對(duì)數(shù)據(jù)執(zhí)行某種操作,只需要把代碼塊放在合適的地方就可以了。這種代碼結(jié)構(gòu)的作用是有限的,例如某些任務(wù)常常需要重復(fù)執(zhí)行多次,即同一代碼塊需

5、要執(zhí)行好幾次,這個(gè)問題的解決方法就要使用函數(shù)。在C# 2008中,函數(shù)是一種方法,可提供在應(yīng)用程序中任何一處執(zhí)行的代碼塊。函數(shù)的內(nèi)容很多、很靈活,本節(jié)只介紹函數(shù)一些常用功能。3.3.1 函數(shù)的基本概念 函數(shù)有許多優(yōu)點(diǎn),C# 2008語言提供了對(duì)函數(shù)的全方位支持,下面用一個(gè)程序介紹了在代碼中如何定義和使用函數(shù),其功能是在窗口上打印出一個(gè)由*組成的矩形,如代碼和代碼所示。 【本示例參考:示例代碼Chap03NoUseFunction】【本示例參考:示例代碼Chap03UseFunction】 代碼 “*”型矩形:UseFunction3.3.2 函數(shù)的返回值 【本節(jié)示例參考:示例代碼Chap03F

6、unction2】 在上一小節(jié)中,函數(shù)雖然都沒有返回任何值,但是實(shí)際上是可以返回各種形式的返回值。常用的格式是: static return-type function-name() return return-data; 3.3.3 函數(shù)的參數(shù) 在上一小節(jié)中,介紹了如何從函數(shù)中返回?cái)?shù)值,這一節(jié)中將介紹如何給函數(shù)傳入數(shù)值,即帶有參數(shù)的函數(shù)。通過合理地使用參數(shù),可以起到增強(qiáng)函數(shù)的作用,帶有參數(shù)函數(shù)的基本格式: static return-type function-name(data-type data-name,) 在上述基本格式中,data-type是參數(shù)的類型,data-name是要傳入的

7、參數(shù)的名稱。當(dāng)參數(shù)個(gè)數(shù)不只有一個(gè)時(shí),參數(shù)之間用逗號(hào)分開,讀者可以根據(jù)自己的需要來定義參數(shù)的個(gè)數(shù)。代碼演示了函數(shù)參數(shù)的用法。3.4 函數(shù)參數(shù)類型 C# 2008中函數(shù)的參數(shù)有四種類型: 值參數(shù),不包含任何修飾符。 輸入引用參數(shù),以ref修飾符聲明。 輸出引用參數(shù),以out修飾符聲明。 數(shù)組型參數(shù),以params修飾符聲明。3.4.1 值參數(shù) 當(dāng)利用值參數(shù)向方法傳遞參數(shù)時(shí),編譯程序會(huì)把參數(shù)值復(fù)制一份傳遞給函數(shù)。所以果函數(shù)的作用不會(huì)作用在實(shí)際參數(shù)上。代碼中演示了值參數(shù)類型函數(shù)的使用。 【本示例參考:示例代碼Chap03Function5】 運(yùn)行結(jié)果: x的值為3,y的值為2 在上述程序中,當(dāng)程序執(zhí)行

8、到Swap(x,y)時(shí)編譯器會(huì)調(diào)用Swap(int x,int y)函數(shù),但被調(diào)用函數(shù)的執(zhí)行并不影響主函數(shù)中x、y的值,因?yàn)閭鬟f給其的值是一份復(fù)制。如果真的要交換主函數(shù)中x、y的值,就需要用到下面的引用參數(shù)。3.4.2 輸入引用參數(shù) 引用參數(shù)并不開辟新的內(nèi)存區(qū)域,當(dāng)利用引用型參數(shù)向方法傳遞形參時(shí),編譯程序?qū)褜?shí)際值在內(nèi)存中的地址傳遞給方法。ref關(guān)鍵字后應(yīng)跟與形參的類型相同的類型聲明。代碼演示了輸入引用類型的函數(shù)。 【本示例參考:示例代碼Chap03Function6】 運(yùn)行結(jié)果: x的值為2,y的值為3 從上面代碼的運(yùn)行結(jié)果可以看出,在代碼中,調(diào)用Swap()交換函數(shù)時(shí),卻沒有實(shí)現(xiàn)交換;但在

9、代碼中,調(diào)用Swap()交換函數(shù)時(shí),卻交換了兩個(gè)數(shù)的值。結(jié)果如此的差異,就源于關(guān)鍵字ref。3.4.3 輸出型參數(shù) 與輸入型參數(shù)引用重載不同的是,雖然也不開辟新的內(nèi)存區(qū)域,但在調(diào)用方法前無需對(duì)變量進(jìn)行初始化。 out關(guān)鍵字后應(yīng)跟隨與形參的類型相同的類型聲明。在方法調(diào)用前不會(huì)被初始化,可是在方法返回后,傳遞的變量必須被初始化。代碼演示了輸出型的函數(shù)。 【本示例參考:示例代碼Chap03Function7】 運(yùn)行結(jié)果: x的值為2,y的值為33.4.4 數(shù)組型參數(shù) 在C# 2008中,當(dāng)參數(shù)個(gè)數(shù)不定時(shí),可以使用params關(guān)鍵字來定義。參數(shù)數(shù)組可以簡(jiǎn)化代碼,因?yàn)椴槐貜恼{(diào)用代碼中傳遞數(shù)組,而可以傳遞

10、可在函數(shù)中使用的一個(gè)數(shù)組中相同類型的幾個(gè)參數(shù)。代碼演示了數(shù)組型的函數(shù)的使用。 【本示例參考:示例代碼Chap03Function8】 運(yùn)行結(jié)果: 總值為23 在上述代碼中,函數(shù)MyAdd(params int x)是用關(guān)鍵字params定義的,可以接受任意個(gè)int參數(shù)。在被調(diào)用的函數(shù)中,通過數(shù)組x中的值迭代,把傳入的值加在一起,返回其結(jié)果。3.5 函數(shù)的重載 在代碼中,如果x、y的值為double型,那么當(dāng)把x、y值傳給被調(diào)用的函數(shù)MyFunction(int a,int b)時(shí),就會(huì)產(chǎn)生錯(cuò)誤。因?yàn)閷?shí)參x、y的類型與虛參a、b的類型不一致。這種單一功能的函數(shù)使用時(shí)限制非常大,所以在C# 200

11、8中提供了函數(shù)重載這一功能,同時(shí)函數(shù)重載也體現(xiàn)了面向?qū)ο蟮亩鄳B(tài)性。3.5.1 參數(shù)類型重載的函數(shù) 迄今為止在調(diào)用函數(shù)的時(shí)候,必須使實(shí)參和形參的類型一致、個(gè)數(shù)和順序要相同。為了解決上面的問題,更為了使的程序的開發(fā)更有效率并且使函數(shù)的調(diào)用更簡(jiǎn)單,C# 2008中出現(xiàn)了函數(shù)重載,即名稱相同,但參數(shù)或返回值不同的函數(shù)。為了深刻的理解參數(shù)類型重載,代碼演示了參數(shù)類型重載的函數(shù)。 【本示例參考:示例代碼Chap03Function9】 運(yùn)行結(jié)果: x與y的和為:5 x與y的和為:5.8 x與y的和為:hello C# 20083.5.2 輸入型參數(shù)引用重載 代碼3-10說明了ref的作用,在這里用代碼演示

12、了輸入型參數(shù)引用重載的函數(shù)?!颈臼纠齾⒖迹菏纠aChap03Function10】 運(yùn)行結(jié)果: x與y的和為:5 x與y的和為:5 從上述代碼中,可以看出,編譯器根據(jù)是否帶有ref關(guān)鍵字自動(dòng)選用了相應(yīng)的函數(shù)。3.5.3 輸出型參數(shù)引用重載 與輸入型參數(shù)引用重載不同的是,雖然輸出型參數(shù)也不開辟新的內(nèi)存區(qū)域,但在調(diào)用方法前無需對(duì)變量進(jìn)行初始化。 out關(guān)鍵字后應(yīng)跟隨與形參的類型相同的類型聲明。在方法調(diào)用前不會(huì)被初始化,可是在方法返回后,傳遞的變量必須被初始化,代碼演示了輸入型參數(shù)引用重載的函數(shù)。 【本示例參考:示例代碼Chap03Function11】 運(yùn)行結(jié)果: x的值為3,y的值為23.5.

13、4 參數(shù)個(gè)數(shù)重載的函數(shù) 函數(shù)重載還可以是根據(jù)參數(shù)個(gè)數(shù)來區(qū)分,代碼演示了參數(shù)個(gè)數(shù)重載的函數(shù)。 【本示例參考:示例代碼Chap03Function12】 運(yùn)行結(jié)果: x與y的和為:5 x與y的和為:8 在上述代碼中,編譯器根據(jù)參數(shù)的個(gè)數(shù)來自動(dòng)選擇調(diào)用了相應(yīng)的MyFunction()函數(shù)。3.6 變量的作用域 變量的作用域,決定了變量的可見性和生命周期。下面將一一介紹各種類型的變量的作用域。3.6.1 代碼塊的作用域 代碼塊由若干語句組成,必須用大括號(hào)括起來。一個(gè)代碼塊同時(shí)也是一個(gè)復(fù)合語句,多個(gè)復(fù)合語句可以嵌套在另外的一對(duì)大括號(hào)中,形成更復(fù)雜的復(fù)合語句。代碼塊決定了變量的作用域,代碼演示了代碼塊作用

14、域的變量。 【本示例參考:示例代碼Chap03Scope1】 上面的代碼通不過編譯,因?yàn)椤皅=x”語句超過了q的作用域。在定義變量的語句所屬的那層大括號(hào)之間,就是這個(gè)變量的有效作用范圍。3.6.2 局部變量 在一個(gè)函數(shù)里面的代碼塊中定義的變量稱為局部變量,其在函數(shù)被執(zhí)行時(shí)創(chuàng)建,在函數(shù)結(jié)束時(shí)被銷毀,代碼演示了局部范圍的變量。 【本示例參考:示例代碼Chap03Scope3】 當(dāng)執(zhí)行該函數(shù)時(shí)候,編譯器會(huì)提示MyFunction()中x、y兩個(gè)變量沒有定義。在上述程序中雖然主函 數(shù) 中 定 義 了 兩 個(gè) 變 量 x 、 y , 但 它 們 跟MyFunction()中“return x+y;”的x

15、、y是不一樣的。3.7 特殊函數(shù)【本節(jié)示例參考:示例代碼Chap03】在每個(gè)程序代碼中,在第一章中,曾給出一個(gè)實(shí)例,如代碼所示?!颈臼纠齾⒖迹菏纠aChap03Hello】在整個(gè)程序中只存在一個(gè)名為Main的函數(shù),是程序的入口點(diǎn),程序?qū)⒃诖颂巹?chuàng)建對(duì)象和調(diào)用方法。一個(gè)程序只能有一個(gè)入口點(diǎn),即一個(gè)函數(shù)只能有一個(gè)Main()函數(shù)。Main()函數(shù)是有參數(shù),基本格式有下面四種:static void Main()static void Main(string args)static int Main()static int Main(string args)3.8 小結(jié) 本章講述了C# 2008中兩種復(fù)雜的類型結(jié)構(gòu)和枚舉,同時(shí)還介紹了函數(shù)。結(jié)構(gòu)跟枚舉的學(xué)習(xí)可以參考上一章的內(nèi)容來學(xué)習(xí)。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論