C#課程教學(xué)-文檔資料_第1頁
C#課程教學(xué)-文檔資料_第2頁
C#課程教學(xué)-文檔資料_第3頁
C#課程教學(xué)-文檔資料_第4頁
C#課程教學(xué)-文檔資料_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第5章函數(shù)、域與屬性 計(jì)算機(jī)科學(xué)系畢好昌 2011年3月2主要內(nèi)容l函數(shù)的定義、使用l屬性與域的定義以及使用 3C#中函數(shù)的定義l在大多數(shù)的應(yīng)用軟件的設(shè)計(jì)中,將應(yīng)用程序分成若干個(gè)功能單元。由于小段的程序更易于理解、設(shè)計(jì)、開發(fā)和調(diào)試,因此采用功能單元是應(yīng)用程序設(shè)計(jì)的核心法則。分為若干個(gè)功能單元以便在應(yīng)用程序中重用功能構(gòu)件。另外,在整個(gè)大的程序中,某些任務(wù)常常要在一個(gè)程序中運(yùn)行好多次,舉個(gè)最簡單的例子,對多個(gè)數(shù)組進(jìn)行排序。此時(shí)我們就可以把這些相同的代碼段寫成一個(gè)單獨(dú)的單元,需要的時(shí)候我們就來調(diào)用它。C#.NET程序語言中我們把這個(gè)單獨(dú)的單元叫做函數(shù) 4函數(shù)的特點(diǎn) l函數(shù)擁有自己的名稱,可以使用合

2、法的C#.NET標(biāo)識(shí)符來命名。但其名稱不能與變量、常數(shù)或定義在類內(nèi)的屬性或者其他方法名重復(fù)。l函數(shù)內(nèi)聲明的變量屬于局部變量,也就是說C#.NET在不同函數(shù)內(nèi)聲明的變量彼此互不相關(guān),其作用域局限在該函數(shù)內(nèi)。所以在不同的函數(shù)內(nèi)允許聲明相同局部變量名稱。l函數(shù)有特定功能,程序代碼簡單明確,可讀性高而且容易調(diào)試和維護(hù)。55.1 函數(shù)的定義和使用 l函數(shù)就是代碼的邏輯片斷,它可以執(zhí)行特定的操作。對象或者類調(diào)用函數(shù)來實(shí)現(xiàn)函數(shù)的功能。函數(shù)可以有返回類型,當(dāng)然,返回類型也可以是Void。函數(shù)聲明的語法為:(參數(shù)1,參數(shù)2,)6函數(shù)的修飾符 l函數(shù)的修飾符有很多,如:lnewlpubliclprotectedl

3、internallprivatelstaticlvirtuallsealedloverridelabstractlextern 7函數(shù)修飾符的含義l上面諸多函數(shù)修飾符中,Public、Protected 、Internal 、Protected Internal 、Private是對函數(shù)作用域的修飾,其余的關(guān)鍵字有其他的含義,在此,我們只講函數(shù)作用域修飾符的意義。8函數(shù)修飾符的含義9一個(gè)簡單的調(diào)用函數(shù)的例子l聲明函數(shù)之后,我們就可以調(diào)用任何類或者對象所使用的函數(shù)。 l例:第一個(gè)函數(shù)的定義以及調(diào)用 lusing System;lusing System.Collections.Generic;l

4、using System.Text;lnamespace Example1Of5ll class Programl l static void Main(string args)l l Console.WriteLine(輸入你的大名:);l string s = Console.ReadLine();l myFirstMethod(s);l l static void myFirstMethod(string s1)l l Console.WriteLine(Welcome +s1+,You have entered the world of the method!);l l l10程序運(yùn)行

5、結(jié)果115.2函數(shù)參數(shù)的傳遞方式l在調(diào)用函數(shù)的時(shí)候,可以向函數(shù)傳遞參數(shù)列表。C#中函數(shù)的參數(shù)有4種類型:l值參數(shù),不含任何修飾符。l引用型參數(shù),以Ref修飾符聲明。l輸出參數(shù),以O(shè)ut修飾符聲明。l數(shù)組型參數(shù),以Params修飾符聲明。l若A語句中調(diào)用函數(shù)B,兩者間有參數(shù)傳遞,那么,我們將A調(diào)用語句中傳送的參數(shù)稱為實(shí)參;被調(diào)用的函數(shù)B中使用的參數(shù)成為形參。 125.2.1 值參數(shù) l當(dāng)利用值向函數(shù)傳遞參數(shù)時(shí),編譯程序給實(shí)參的值做一份復(fù)制,并且將此復(fù)制傳遞給該函數(shù)。被調(diào)用的函數(shù)不會(huì)修改內(nèi)存中實(shí)參的值,所以使用值參數(shù)時(shí),可以保證實(shí)際值是安全的。 13值參數(shù)傳遞示例l例例 值參數(shù)傳遞示例。l程序代碼

6、:using System;namespace Example3Of5 class Program static void Main(string args) int a = 3; int b = 5; change(a,b); Console.WriteLine(a=0, b=1,a,b); static void change(int a1, int b1) int t; t = a1; a1 = b1; b1 = t; 14程序運(yùn)行結(jié)果l此程序的輸出結(jié)果是a=3 , b=5 ,可見我們并沒有達(dá)到交換的目的,在這個(gè)程序里我們采用了值參數(shù)傳遞,形參值的修改并不影響實(shí)參的值。 155.2.2

7、引用型參數(shù) l與值參不同的是,引用型參數(shù)并不開辟新的內(nèi)存區(qū)域。當(dāng)利用引用型參數(shù)向函數(shù)傳遞形參時(shí),編譯程序?qū)褜?shí)際值在內(nèi)存中的地址傳遞給函數(shù)。l在函數(shù)中,引用型參數(shù)通常已經(jīng)初始化。 16引用型參數(shù)傳遞例子l例例 把上面例子改寫成引用型參數(shù)傳遞。 程序代碼:using System;namespace Example4Of5 class Program static void Main(string args) int a = 3; int b = 5; change(ref a, ref b); Console.WriteLine(a=0, b=1, a, b); static void cha

8、nge(ref int a1, ref int b1) int t; t = a1; a1 = b1; b1 = t; 17運(yùn)行結(jié)果及分析l此程序的輸出結(jié)果是a=5,b=3 。在Main()函數(shù)中,調(diào)用了change函數(shù),使用引用型參數(shù),成功地實(shí)現(xiàn)了a和b的交換。a1和b1所處的內(nèi)存區(qū)域其實(shí)就是a和b所處的內(nèi)存區(qū)域,所以當(dāng)a1和b1的值互換時(shí),a和b的值自然會(huì)發(fā)生變化。 185.2.3 輸出型參數(shù) l與引用型參數(shù)類似,輸出型參數(shù)也不開辟新的內(nèi)存區(qū)域。與引用型參數(shù)的差別在于,調(diào)用前不需對變量進(jìn)行初始化。輸出型參數(shù)用于傳遞方法返回的數(shù)據(jù)。lOut修飾符后應(yīng)跟隨與形參的類型相同的類型聲明。在方法返回

9、后,傳遞的變量被認(rèn)為經(jīng)過了初始化。 19Out關(guān)鍵字使用小例子l例例 使用Out關(guān)鍵字練習(xí)編寫輸出參數(shù)。l程序代碼:lusing System;lnamespace Example5Of5ll class Programl l static void Main(string args)l l Console.WriteLine(n out 參數(shù)輸出 * n);l int a, b;l UseOut(out a,out b);l Console.WriteLine(n 調(diào)用UseOut函數(shù)后返回主程序:a=0, b=1,a,b);l Console.ReadLine();l l private

10、static void UseOut(out int x,out int y) l l int temp;l x = 20;l y = 30;l Console.WriteLine(n 函數(shù)內(nèi)交換前 x=0, y=1, x,y);l temp = x;l x = y;l y = temp;l Console.WriteLine(n 函數(shù)內(nèi)交換后 x=0, y=1, x, y);l l l 20運(yùn)行結(jié)果215.2.4數(shù)組型參數(shù) lC#允許為函數(shù)指定一個(gè)(只能指定一個(gè))特定的參數(shù),這個(gè)參數(shù)必須是函數(shù)定義中的最后一個(gè)參數(shù),稱為數(shù)組型參數(shù)。數(shù)組型參數(shù)可以使用個(gè)數(shù)不定的參數(shù)調(diào)用函數(shù),它可以使用param

11、s關(guān)鍵字來定義。另外,參數(shù)只允許是一維數(shù)組。比如int 和 int類型都可以作為數(shù)組型參數(shù),而int, 則不可以。最后,數(shù)組型參數(shù)不能再有Ref 和Out 修飾符。 22數(shù)組型參數(shù)示例l例例數(shù)組型參數(shù)示例 lusing System;lnamespace Example6Of5ll class Programl l static void Main(string args)l l l int maxAge = Max(18, 23, 19, 22, 27);l Console.WriteLine(the max of age is : 0,maxAge);l l static int Max(

12、params int Age)l l int temp=0;l for (int i = 0; i Age.Length; i+)l l if (temp Agei)l temp = Agei;l l return temp;l l l23程序運(yùn)行結(jié)果24數(shù)組型參數(shù)示例l例例 數(shù)組型參數(shù)示例(多種類型的實(shí)參,同一形參)。 l程序代碼:lusing System;lnamespace Example7Of5ll class Programl l static void Main(string args)l l int f1 = 1, 2, 3, 4 ;l Output(f1);l Output(

13、10, 20, 30);l Output();l Console.ReadLine();l l static void Output(params int a)l l Console.WriteLine(there are 0 elements:,a.Length);l foreach (int i in a)l l Console.Write(0,i);l l Console.WriteLine();l l l25程序運(yùn)行結(jié)果 265.2.5參數(shù)的匹配 l在調(diào)用函數(shù)時(shí),實(shí)參和形參必須完全匹配,這意味著形參與實(shí)參之間類型、個(gè)數(shù)和順序都要完全匹配。例如下面的函數(shù):private void f(i

14、nt a,string b) Console.WriteLine(dsahfsd;hnf); l則不能使用下面的代碼調(diào)用; f(1,2);27l這是因?yàn)?,函?shù)的形參第一個(gè)為整型,第二個(gè)為string型。而調(diào)用函數(shù)的代碼中第一個(gè)實(shí)參為整型,第二個(gè)還是整型,與函數(shù)的第二個(gè)形參不匹配。同樣,上面的函數(shù)也不能被以下代碼調(diào)用: f(there);這里的實(shí)參形參個(gè)數(shù)明顯不一樣,所以不可以。參數(shù)的不匹配通不過編譯,因?yàn)榫幾g器要求必須匹配函數(shù)的簽名。 285.3 區(qū)塊變量與屬性成員 295.3.1 區(qū)塊變量 lC#.NET 語言中,區(qū)塊變量被定義于某個(gè)區(qū)塊中,比如說前面所講的While循環(huán)語句中聲明的變量,只

15、能在所定義的While循環(huán)中使用。也就是說,某區(qū)塊中定義的變量,只能供這個(gè)區(qū)塊使用,區(qū)塊以外使用則報(bào)錯(cuò)。 305.3.2 屬性成員l屬性成員跟在第二章中介紹的靜態(tài)變量一樣,不同的是對象屬性是放在堆里面的,必須對對象進(jìn)行實(shí)例化,才可以使用屬性;而靜態(tài)字段是放在全局變量區(qū)的,不需要實(shí)例化對象就直接可以引用靜態(tài)變量。lclass testll public static int value; /靜態(tài)變量l public int value1; /對象屬性l315.4 Main()函數(shù) l所有的C#應(yīng)用程序必須在它的一個(gè)類中定義一個(gè)名為Main的函數(shù)。這個(gè)函數(shù)作為應(yīng)用程序的入口點(diǎn),它必須被定義為靜態(tài)的

16、。具體在哪個(gè)類中使用Main()函數(shù)對C#編譯器并無影響,而且你選擇的類也不影響編譯的次序。這與C+不同,在C+中編譯應(yīng)用程序時(shí)必須密切注意依賴性。C#編譯器很精明,可以自己在源代碼文件中自動(dòng)搜尋到Main()函數(shù)。因此,這個(gè)最重要的方法是所有C#應(yīng)用程序的入口點(diǎn)。 32l雖然一個(gè)C#應(yīng)用中可能會(huì)有很多類,但是其中只有一個(gè)入口。在同一個(gè)應(yīng)用中,可能多個(gè)類都有Main()函數(shù),但是只有一個(gè)Main()函數(shù)是被執(zhí)行的。你需要在編譯的時(shí)候指定究竟使用哪一個(gè)Main()函數(shù)。l常見的Main()函數(shù)是這樣的:static void Main(string args) lMain()函數(shù)中的參數(shù)Args

17、是從應(yīng)用程序的外部接受信息的方法,這些信息在運(yùn)行期間指定,其形式是命令行參數(shù)。33l細(xì)心的讀者會(huì)注意到,Main()函數(shù)必須定義為靜態(tài)的,這是因?yàn)镃#.NET是一門真正的面向?qū)ο蟮木幊陶Z言,Main()函數(shù)是整個(gè)應(yīng)用程序的入口,Static可以保證程序調(diào)用的時(shí)候不需要實(shí)例化就可以運(yùn)行程序??纯聪旅娴囊欢未a:lnamespace testll class Testl l public void InstanceMethod() / 實(shí)例成員(非靜態(tài)) l public static void StaticMethod / 類型成員(靜態(tài))l static void Main(string ar

18、gs)l l InstanceMethod(); / 錯(cuò)誤!調(diào)用了實(shí)例成員,而此時(shí)并沒有建立實(shí)例 l StaticMethod(); / 正確!可以調(diào)用靜態(tài)成員 l Test SomeTest = new Test(); / 建立本類型的一個(gè)實(shí)例 l SomeTest.InstanceMethod(); /再在這個(gè)實(shí)例上調(diào)用實(shí)例成員就對了 l SomeTest.StaticMethod(); /附加一句,在實(shí)例上調(diào)用靜態(tài)成員也是錯(cuò)誤的! l l 上面的代碼中注釋很明確,在這里就不多解釋了。 345.5 字段 l字段聲明方法:field-modifiers type variable-decla

19、rators ;其中field-modifiers表示字段的修飾符,type表示字段的具體類型,variable-declarators表示字段的變量名。 35l字段的修飾符field-modifiers可以是:lnewlpubliclprotectedlinternallprivate lstaticlreadonly365.6 屬性 l屬性的定義跟域有些相似,但是內(nèi)容要比域的內(nèi)容多。屬性是對現(xiàn)實(shí)世界中實(shí)體特征的抽象,它提供了對類或?qū)ο笮再|(zhì)的訪問。比如,一個(gè)用戶的姓名、一個(gè)文件的大小、一件物品的重量都可以作為屬性。類的屬性所描述的是狀態(tài)信息,在類的某個(gè)實(shí)例中屬性的值表示該對象的狀態(tài)值。 37屬性的修飾符l屬性的修飾符property-modifiers有:lnewlpubliclprotectedlinternallprivatelstaticlvirtuallsealedloverridelabstract38屬性定義舉例l下面的代碼簡單地介紹了屬性myProperties的定義。lclass All private int i;l public int myPropertiesl l getl l return i;l l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論