C#程序設(shè)計(jì)與開發(fā)第4章
單擊此處編輯母版標(biāo)題樣式,第三級,*,1,第四章,函數(shù),在程序中使用函數(shù)可以將若干條語句按照功能組織成一個獨(dú)立的代碼單元,這有利于復(fù)雜程序的組織、管理,有利于編程人員分工協(xié)作、逐步實(shí)現(xiàn)復(fù)雜的功能,有利于代碼的重復(fù)利用和維護(hù)。在,C,中,函數(shù)也稱為方法,在未介紹面向?qū)ο蟮挠嘘P(guān)概念之前,暫時使用函數(shù)這一術(shù)語,在本書的第,5,章介紹,C#,面向?qū)ο缶幊虝r,還會對方法進(jìn)行介紹。,本章的主要內(nèi)容包括:怎樣在,C#,程序中定義和使用函數(shù),結(jié)合函數(shù)介紹變量作用域的有關(guān)概念,使用重載函數(shù)的意義以及委托的基本概念。,2,本章學(xué)習(xí)要點(diǎn),在控制臺應(yīng)用程序中定義和使用函數(shù),通過返回值和參數(shù),利用函數(shù)交換數(shù)據(jù),參數(shù)數(shù)組,按引用或按值傳遞參數(shù),使用輸出參數(shù),變量作用域的概念,理解函數(shù)的重載,委托的概念,3,4.1,定義函數(shù),要使用函數(shù),首先需要定義函數(shù)。在函數(shù)的定義中指定了函數(shù)所要完成的功能。函數(shù)的定義包含了兩個部分:函數(shù)頭和函數(shù)體。函數(shù)頭是函數(shù)定義中的第一行,在左花括號之前;函數(shù)體位于花括號對中,它包含了調(diào)用函數(shù)時要執(zhí)行的代碼。,1,函數(shù)頭,2,函數(shù)體,3,參數(shù),4.2,使用函數(shù),在知道了怎樣在,C#,代碼中定義函數(shù)之后,下面介紹怎樣在,C#,中使用函數(shù)。函數(shù)本來就是一個邏輯功能單元,使用函數(shù)的最基本目的就是讓它實(shí)現(xiàn)某個功能;除了實(shí)現(xiàn)某個特定的功能之外,還可通過函數(shù)進(jìn)行數(shù)據(jù)交換(主調(diào)函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)交換),一種方式是使用函數(shù)的返回值,另一種方式是使用函數(shù)參數(shù);使用函數(shù)的這兩個目的并非總是截然分開的,例如,有時需要進(jìn)行數(shù)據(jù)交換才能實(shí)現(xiàn)某個特定的功能。,4,4.2.2,參數(shù),如果需要通過函數(shù)參數(shù)實(shí)現(xiàn)數(shù)據(jù)交換,必須在定義函數(shù)時,為函數(shù)指定要接受的參數(shù)列表,以及這些參數(shù)的類型;而且,在調(diào)用函數(shù)時要指定匹配的參數(shù)列表,即,實(shí)參的個數(shù)、類型和順序要與形參的個數(shù)、類型和順序保持一致,或者形參的類型能夠兼容實(shí)參的類型。,1,關(guān)于參數(shù)匹配,2,參數(shù)數(shù)組,3,引用參數(shù)和值參數(shù),4,輸出參數(shù),5,4.3,變量的作用域,本章的上一節(jié)介紹了怎樣使用函數(shù)交換數(shù)據(jù),但為什么需要使用函數(shù)交換數(shù)據(jù)呢?這就涉及到了變量的作用域問題。,程序中定義的變量都具有特定的作用域,變量的作用域是指程序中哪些地方可以使用該變量。不同變量的作用域可能是不同的,有的變量可以在程序的任何地方使用,而有的變量只能在程序的有限地方被使用。,6,4.4,函數(shù)重載,在編程中常常需要使用兩個或多個函數(shù)完成相同的任務(wù),但其參數(shù)的數(shù)據(jù)類型不同。例如,需要使用,larger(),函數(shù)的不同版本,查找出任何基本數(shù)據(jù)類型的兩個變量中的較大者。在理想情況下,所有這些函數(shù)都使用相同的名稱,larger(),,另一種方法是為,int,類型的變量定義函數(shù),largerInt(),為,double,類型的變量定義函數(shù),largerDouble(),,這兩個函數(shù)的作用是相同的,但卻使用不同的名字,看上去很笨拙,不如前一種方法方便。,在,C#,中,可以使用兩個或兩個以上具有相同名稱只是參數(shù)聲明不完全相同的函數(shù),這種情況稱為函數(shù)的重載。概括地說,要重載函數(shù),只需聲明函數(shù)的不同版本,編譯器會處理剩余的工作。但重載函數(shù)的不同版本之間必須至少滿足下列所述的一個條件:,參數(shù)數(shù)目不同,參數(shù)類型不同,參數(shù)的順序不同,7,4.5,委托,委托是一種變量類型,可以間接地使用函數(shù)。同一個委托可以調(diào)用匹配于特定函數(shù)簽名的任何函數(shù),提供在程序運(yùn)行期間對幾個函數(shù)進(jìn)行選擇的能力。由于委托跟面向?qū)ο蟮母拍钣嘘P(guān),在未介紹,C#,面向?qū)ο缶幊讨?,本?jié)只介紹與委托有關(guān)的部分知識。,委托是一種可以把引用存儲為函數(shù)的類型。委托的聲明非常類似于函數(shù),但沒有函數(shù)體,而且要使用,delegate,關(guān)鍵字。委托的聲明指定了一個函數(shù)簽名,其中包括返回類型和參數(shù)列表;在聲明委托之后,就可以聲明該委托類型的變量了,可將該變量初始化為與委托有相同簽名的函數(shù)引用,然后,就可以使用委托變量調(diào)用這個函數(shù)。,在具有可引用函數(shù)的變量后,還可以執(zhí)行不能用其他方式完成的操作。例如,可以把委托變量作為參數(shù)傳遞給一個函數(shù),這樣,該函數(shù)就可以使用委托調(diào)用它引用的任何函數(shù),而且,在運(yùn)行之前無需知道調(diào)用的是哪個函數(shù)。,8,