




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
目錄第2章類的概念與方法2.1類概述2.2
程序和類的簡單示例:撲克牌游戲2.3
類的聲明與實(shí)例化2.4訪問修飾符2.5方法2.6屬性2.7索引器*2.8構(gòu)造函數(shù)2.9析構(gòu)函數(shù)2.10
靜態(tài)成員2.11
常量2.12對象初始化語句2.13readonly修飾符與this關(guān)鍵字*2.14小結(jié)2.1類概述面向?qū)ο蟪绦蛟O(shè)計面向?qū)ο螅?/p>
面向?qū)ο蟮某绦蛟O(shè)計(ObjectOrientedProgramming)其實(shí)是一種模擬自然界對象活動的高級程序設(shè)計語言。任何實(shí)際的物體都可以說是對象,例如學(xué)生、老師、汽車、鍵盤、屏幕等,對象可以是可見的或不可見的,可以是有形的或無形的,可以是有生命的或沒有生命的。計算機(jī)系統(tǒng)對對象的抽象化,主要分為兩種:①數(shù)據(jù)的抽象化,將事務(wù)的數(shù)據(jù)抽象為計算機(jī)程序中的變量;②活動過程的抽象化,將現(xiàn)實(shí)生活中事務(wù)的活動過程轉(zhuǎn)化為程序中的執(zhí)行流程。對象有屬性和功能,屬性就是對象的數(shù)據(jù),功能描述對象的活動。在面向?qū)ο蟪绦蛟O(shè)計語言中,一般習(xí)慣性的把屬性叫作對象的數(shù)據(jù)成員,而把功能叫做對象的方法成員。如學(xué)生張三,該對象的屬性可以是年齡、住址、手機(jī)號碼、性別、身高、體重等,功能可以是跑步、學(xué)習(xí)等。2.1類概述面向?qū)ο蟪绦蛟O(shè)計對象的抽象與歸類:在處理某一實(shí)際問題時,為便于管理對象,對這些具有共性的對象歸類處理,即按實(shí)際需要將這些共性對象的屬性和方法抽象出來給與一個共同的定義,這就形成了類(class)。抽象化的角度取決于要解決的問題或要實(shí)現(xiàn)的目標(biāo),只能把與目標(biāo)相關(guān)的對象及其屬性、方法抽離出來。以一個簡單的圖書管理系統(tǒng)為例,一般性的將讀者的姓名、性別、身份證號抽離出來作為讀者的屬性。書籍添加、書籍書籍刪除抽離出來作為管理員的方法。類的封裝:將數(shù)據(jù)和對數(shù)據(jù)的處理的方法結(jié)合在一起,對外只提供操作接口,隱藏方法的具體實(shí)現(xiàn)過程,同時對某些屬性也進(jìn)行隱藏,結(jié)果通過類成員的封裝設(shè)計不但提供了對外接口,同時實(shí)現(xiàn)了信息安全。而類是產(chǎn)生對象的模子,因此,用這樣的類創(chuàng)建的對象對外只有接口,其它全部隱藏。C#程序是一系列類型聲明。命名空間是一種將相關(guān)的類型聲明分組并命名的方法。2.1類概述類類是C#語言的核心,也是面向?qū)ο蟪绦蛟O(shè)計的基本模塊,從定義上講,類是一種數(shù)據(jù)結(jié)構(gòu)。用戶定義類型:包括6種類型。類類型(class)結(jié)構(gòu)類型(struct)數(shù)組類型(array)枚舉類型(enum)委托類型(delegate)接口類型(interface)在面向?qū)ο蟮姆治龊驮O(shè)計出現(xiàn)之前,程序員們僅把程序當(dāng)作指令的序列,那時的焦點(diǎn)主要放在指令的組合和優(yōu)化上。隨著面向?qū)ο蟮某霈F(xiàn),焦點(diǎn)從優(yōu)化指令轉(zhuǎn)移到組織程序的數(shù)據(jù)和功能上。程序的數(shù)據(jù)和功能被組織為邏輯上相關(guān)的數(shù)據(jù)項和函數(shù)的封裝集合,即為“類”。類是一個能存儲數(shù)據(jù)并執(zhí)行代碼的數(shù)據(jù)結(jié)構(gòu),類的成員包括:數(shù)據(jù)成員——存儲與類或類的實(shí)例相關(guān)的數(shù)據(jù),通常模擬該類所表示的現(xiàn)實(shí)世界事物的特性函數(shù)成員——執(zhí)行代碼,通常模擬類所表示的現(xiàn)實(shí)世界事物的功能和操作2.1類概述類一個C#類可以有任意數(shù)目的數(shù)據(jù)成員和函數(shù)成員。成員可以是9種成員類型的任意組合。這些成員類型如下表所示。表:類成員的類型我們先講述字段和方法。2.1類概述類成員字段和方法是最重要的類成員類型。其中,字段是數(shù)據(jù)成員,方法是函數(shù)成員。字段:
字段是隸屬于類的變量,是類中用于存儲數(shù)據(jù)的成員,用于保存對象的狀態(tài)和屬性。字段可以是任何類型,無論是預(yù)定義類型(值類型/引用類型)還是用戶定義類型。和所有變量一樣,字段用來保存數(shù)據(jù),并具有以下特征:可寫入/可讀取。字段的聲明:類型
名稱;intStuNum;//聲明字段//示例注意:與C和C++不同,C#在類型的外部不能聲明全局變量(也就是變量或字段)。所有的字段都屬于類型,而且必須在類型聲明內(nèi)部聲明。2.1類概述類成員字段初始化:因?yàn)樽侄问且环N變量,所以字段初始化語句在語法上和上一章所述的變量初始化語句相同。字段初始化語句由一個等號和一個求值表達(dá)式組成,其中初始化值必須是編譯時可確定的。intStuNum=1;//字段初始化默認(rèn)初始化:如果沒有初始化語句,字段的值會被編譯器設(shè)為默認(rèn)值,取決于字段的類型——每種值類型的默認(rèn)值都是0,bool型的默認(rèn)值是false,引用類型的默認(rèn)值為nul1。intStuNum;stringStuName;//初始化為0//初始化為null聲明多個字段:用逗號分隔,在同一條語句中聲明多個相同類型的字段。intStuNum,
StuNum2
=
2;stringStuName,StuName2=“Lilei”;//初始化為?//2.1類概述類成員方法:方法是具有名稱的可執(zhí)行代碼塊,可以從程序的很多不同地方執(zhí)行,甚至從其他程序中執(zhí)行。當(dāng)方法被調(diào)用時,它執(zhí)行所含代碼,然后返回到調(diào)用它的地方,繼續(xù)執(zhí)行后續(xù)代碼(相當(dāng)于C++中的成員函數(shù))。聲明方法:由幾以部分組成返回類型——聲明了方法返回值的類型,如果不返回值,則聲明為void名稱——方法的名稱參數(shù)列表——它至少由一對空的圓括號組成。如果有參數(shù)(參數(shù)將在下一章閘述),將被列在圓括號中間方法體——它由一對大括號組成,大括號內(nèi)包含執(zhí)行代碼。返回類型
名稱(參數(shù)列表){方法體};voidPrintNum(){Console.WriteLine(“1”);};//聲明方法//示例注意:與C和C++不同,C#中沒有全局函數(shù)(也就是方法或函敏)聲明在類型聲明的外部。C#中方法沒有致認(rèn)的返回類型。所有方法必須包含返回類型或void。2.2程序和類的簡單示例:撲克牌游戲程序和類撲克牌游戲:一個運(yùn)行中的C#程序是一組相互作用的類型對象的集合,它們中的大部分是類的實(shí)例。例如,假設(shè)有一個模擬撲克牌游戲的程序。當(dāng)程序運(yùn)行時,它有一個名為Dealer的類實(shí)例(QQ斗地主),它的工作就是運(yùn)行游戲。還有幾個名為Player的類實(shí)例,它們代表游戲的玩家。Dealer對象保存紙牌的當(dāng)前狀態(tài)和玩家數(shù)目等信息。它的動作包括洗牌和發(fā)牌。Player類有很大不同。它保存玩家名稱以及手中的牌等信息,并實(shí)現(xiàn)如分析當(dāng)前手牌和出牌動作。運(yùn)行中的程序如圖所示。類名顯示在方框外面,實(shí)例名顯示在方框內(nèi)。一個真正的程序無疑會包含除Dealer和Player之外的許多其他的類,還會包括像Card和Deck這樣的類。每一個類都模擬某種撲克牌游戲中的事物。2.3類的聲明與實(shí)例化聲明類撲克牌游戲:Dealer和Player這樣的類不是C#默認(rèn)的類型,而是用戶定義類型。如果想在程序中使用它們,必須通過編寫類的聲明自己定義它們。類的聲明定義新類的特征和成員,聲明用于創(chuàng)建實(shí)例的模板,但它并不創(chuàng)建類的實(shí)例。類的聲明包括以下內(nèi)容:類的名稱類的成員類的特征class
名稱{
成員1;
成員2;…}//聲明類//注意:類成員可以在類主體內(nèi)部以任何順序聲明。這意味著一個成員的聲明完全可以引用另一個在后面的類聲明中才定義的成員。2.3類的聲明與實(shí)例化類的實(shí)例類的實(shí)例:類的聲明只是創(chuàng)建了模板,然后就可以創(chuàng)建類的實(shí)例。類是引用類型,它要為數(shù)據(jù)引用和實(shí)際數(shù)據(jù)都申請內(nèi)存。數(shù)據(jù)的引用保存在一個類類型的變量中。所以要創(chuàng)建類的實(shí)例,需要從聲明一個類類型的變量開始。classDealer{…}classProgram{staticvoidMain(){DealertheDealer;}}//聲明Dealer類//聲明程序類//創(chuàng)建Dealer類的變量theDealer第一行代碼是類Dealer的聲明,下面是類Program的聲明,它包含Main方法。Main聲明了Dealer類型的變量theDealer。因?yàn)樵撟兞繘]有初始化,所以它的值是未定義的。2.3類的聲明與實(shí)例化類的實(shí)例為數(shù)據(jù)分配內(nèi)存:聲明類類型的變量所分配的內(nèi)存是用來保存引用的,而不是用來保存類對象實(shí)際數(shù)據(jù)的。要為實(shí)際數(shù)據(jù)分配內(nèi)存,需要使用new運(yùn)算符。new運(yùn)算符為任意指定類型的實(shí)例分配并初始化內(nèi)存。它根據(jù)類型的不同從?;蚨牙锓峙?。使用new運(yùn)算符組成一個對象創(chuàng)建表達(dá)式,組成: 關(guān)鍵字new 要分配內(nèi)存的實(shí)例的*類型名稱* 成對的圓括號(參數(shù)可選)如果將內(nèi)存分配給一個引用類型,則對象創(chuàng)建表達(dá)式返回一個引用,指向在堆中被分配并初始化的對象實(shí)例new
類型名稱()//為類的數(shù)據(jù)分配內(nèi)存2.3類的聲明與實(shí)例化類的實(shí)例例:DealertheDealer;theDealer=newDealer;//聲明Dealer類的變量theDealer//使用對象創(chuàng)建表達(dá)式創(chuàng)建Dealer類的實(shí)例,并賦值給類變量theDealer圖:創(chuàng)建類的實(shí)例合并兩個步驟:DealertheDealer=newDealer;//聲明類變量初始化2.3類的聲明與實(shí)例化實(shí)例成員類聲明相當(dāng)于構(gòu)建模板,有了模板后可以通過模板創(chuàng)建任意個類的實(shí)例。實(shí)例成員:實(shí)例成員員類的每個實(shí)例都是不同的實(shí)體,它們有自己的一組數(shù)據(jù)成員。因?yàn)檫@些數(shù)據(jù)成員都和類的實(shí)例相關(guān),所以被稱為實(shí)例成員。如,創(chuàng)建了“學(xué)生”的類,可以為每個學(xué)生創(chuàng)建一個實(shí)例,每個學(xué)生實(shí)例會有各自的姓名、學(xué)號、班級等字段,上課、考試等方法。靜態(tài)成員:除實(shí)例成員外,在聲明類時,還可以為類聲明靜態(tài)成員,它與實(shí)例無關(guān),而與類模板有關(guān),比如“學(xué)生”的學(xué)校。classStudent{stringName;}classProgram{staticvoidMain(){Studentstu1=newStudent();//創(chuàng)建實(shí)例Studentstu2=newStudent();Studentstu3=newStudent();}}//聲明Student類…s3s2s12.4訪問修飾符類修飾符類修飾符指的是用于修飾類的關(guān)鍵字,它們影響類的可見性和繼承特性。C#中常用的類名修飾符有以下幾種:①public:表示類是公共的,對所有代碼都可見??梢栽谄渌惢虺绦蚣性L問該類。通常用于在不同的代碼文件或程序集中創(chuàng)建可重用的類。②internal(默認(rèn)):表示類是內(nèi)部的,只能在當(dāng)前程序集(assembly)內(nèi)部訪問。其他程序集中的代碼不能訪問該類。當(dāng)類名前省略修飾符時則默認(rèn)為internal。③abstract:表示類是抽象的,不能直接實(shí)例化,只能作為其它類的基類。抽象類可以包含抽象成員,即只有聲明而沒有具體實(shí)現(xiàn)的成員。④sealed:表示類是密封的,不能被其它類繼承。密封類用于防止其它類繼承或重寫它的成員。⑤static:修飾類時表示該類是靜態(tài)類,不能夠?qū)嵗擃惖膶ο?,該類的所有成員為靜態(tài)。⑥partial:部分類(或分布式類),可以將一個類的定義分散為寫在多個代碼段中,這些代碼段可以存放于多個不同的C#源文件,編譯器在編譯時將這些分散的部分類合并到一起編譯成一個完整的類。特別提示:這些類名修飾符可以單獨(dú)使用,也可以組合使用。例如,一個類可以同時是public和abstract,表示它是公共的抽象基類,其它類可以繼承它。需要根據(jù)具體的需求和設(shè)計選擇合適的類名修飾符,以確保代碼的可見性、安全性和可維護(hù)性。publicclassDealer{…};//聲明public類2.4訪問修飾符成員修飾符成員修飾符用于控制類的成員(字段、屬性、方法等)的可見性和訪問級別。從類的內(nèi)部,任何函數(shù)成員都可以使用成員的名稱訪問類中任意的其他成員。訪問修飾符是成員聲明的可選部分,指明程序的其他部分如何訪問成員。訪問修飾符放在簡單聲明形式之前。下面是字段和方法聲明的語法:C#中常用的類成員修飾符有以下幾種:①public:表示成員對所有代碼都可見,沒有訪問限制。其它類、程序集中的代碼,以及其他命名空間中的代碼都可以訪問該成員。②protected:表示成員只能在當(dāng)前類或其派生類中訪問。其它類或程序集中的代碼不能直接訪問該成員。③private(默認(rèn)):表示成員只能在當(dāng)前類內(nèi)部訪問。其它類或程序集中的代碼都無法直接訪問該成員。④internal:表示成員只能在當(dāng)前程序集(assembly)內(nèi)部訪問。其它程序集中的代碼不能直接訪問該成員。⑤virtual:用于聲明虛方法,表明在派生類中該方法可以被重寫,以實(shí)現(xiàn)同一方法名稱的不同表現(xiàn)行為,即方法的多態(tài)。⑥static:修飾類成員時,該成員為類成員(靜態(tài)成員),為該類的對象共享,因此只能通過“類名.成員名”的方式訪問;當(dāng)static修飾構(gòu)造函數(shù)時,構(gòu)造函數(shù)不能含有任何參數(shù),不能有其他修飾符,構(gòu)造函數(shù)不能對對象成員進(jìn)行初始化操作,但是能夠?qū)o態(tài)成員進(jìn)行初始化或者調(diào)用,并在靜態(tài)構(gòu)造函數(shù)中初始化的靜態(tài)成員為最終初始化結(jié)果。成員修飾符類型標(biāo)識符;成員修飾符返回類型方法名(){…}//字段//方法2.4訪問修飾符成員修飾符成員修飾符用于控制類的成員(字段、屬性、方法等)的可見性和訪問級別。C#中常用的類成員修飾符有以下幾種:⑦sealed:修飾方法時表示該方法不能被覆蓋。⑧abstract:修飾方法的時候表示該方法為抽象方法,抽象方法需要由子類來實(shí)現(xiàn),如果子類沒實(shí)現(xiàn)該抽象方法那么子類同樣是抽象類;含有抽象方法的類一定是抽象類。⑨其它修飾符:override:表示該方法為覆蓋父類的方法。readonly:只讀字段,其值可以也可以在構(gòu)造時指定。const:常量字段,編譯時必須指定其值,其值編譯到程序中new:隱藏從父類成員繼承的成員,在不使用new修飾符的情況下隱藏成員是允許的,但會生成警告;顯然,new不能和abstract同時用。另外new也可以是運(yùn)算符,用于創(chuàng)建對象并調(diào)用構(gòu)造函數(shù)。event:聲明一個事件.extern:指示方法在外部實(shí)現(xiàn)。
特別提示:成員修飾符也可以適當(dāng)組合,形成組合意義。2.4訪問修飾符私有訪問和公有訪問私有成員只能從聲明它的類的內(nèi)部訪問,其他的類看不見或無法訪問它們。私有訪問(private)是*類成員*默認(rèn)的訪問級別也可以顯式聲明成員訪問權(quán)限為privateintMyInt;privateintMyInt;//等價的聲明//說明:1.聲明命名空間、類,前面不加限制訪問修飾符時,默認(rèn)訪問權(quán)限為internal—訪問僅限于當(dāng)前程序集>2.聲明類成員(包括字段(變量)、屬性和方法)默認(rèn)為private))以及結(jié)構(gòu)類型,前面不加限制訪問修飾符時,默認(rèn)訪問權(quán)限為private-訪問僅限于當(dāng)前類>3.聲明枚舉類型以及接口類型,前面不加限制訪問修飾符時,默認(rèn)為public且只能為public(就算要把限制訪問修飾符寫出來,也只能寫public,而不能使用其他限制訪問修飾符)—訪問不受限制。2.4訪問修飾符私有訪問和公有訪問公有成員可以被程序中的其他對象訪問。必須使用public訪問修飾符指定公有訪問。示例:ClassC1{intF1;privateintF2;publicintF3;voidDoCalc(){…}publicintGetVal(){…}}2.4訪問修飾符從類的內(nèi)部訪問成員在類的內(nèi)部,可以對類的字段和方法進(jìn)行訪問,即使字段或方法被聲明為private。示例:classDaysTemp{//字段privateint
High=75;privateint
Low=45;//方法privateint
GetHigh(){
returnHigh;//訪問私有字段}privateint
GetLow(){returnLow;//訪問私有字段}publicfloatAverage(){return(GetHigh()+GetLow())/2;//訪問私有方法}}2.4訪問修飾符從類的外部訪問成員要從類的外部訪問實(shí)例成員,必須包括變量名稱和成員名稱,中間用句號分隔——稱為點(diǎn)運(yùn)算符(dot-syntaxnotation)。示例:創(chuàng)建類的實(shí)例,并從外部訪問其公有方法。DaysTempmyDt=newDaysTemp();//創(chuàng)建類的實(shí)例floatfValue=myDt.Average();//從外部訪問
變量名稱.成員名稱例題:編寫代碼,聲明兩個類:DaysTemp和Program,輸出當(dāng)日的最高氣溫與最低氣溫。要求:聲明DaysTemp類,并在其內(nèi)部聲明兩個int成員High和Low分別存儲最高與最低氣溫的值;聲明Program類,包含程序Main(),創(chuàng)建DaysTemp實(shí)例,并修改實(shí)例的最高與最低氣溫;通過Console.WriteLine()命令,輸出當(dāng)天的最高與最低氣溫。2.4訪問修飾符從類的外部訪問成員代碼:classDaysTemp{publicintHigh=75; publicintLow=45;}classProgram{staticvoidMain(){DaysTemptemp=newDaysTemp();
temp.High=85;
temp.Low=60; Console.WriteLine("High:{0}",temp.High);Console.WriteLine($“Low:{temp.low}");}}//聲明類DaysTemp//聲明類Program//創(chuàng)建DaysTemp實(shí)例對象//字段賦值//讀取字段值說明:DaysTemp內(nèi)的兩個字段被聲明為public,所以可以從類的外部訪問它們。方法Main是類Program的成員。它創(chuàng)建了一個變量和類DaysTemp的對象,并給對象的字段賦值。然后它讀取字段的值并打印出來。2.5方法方法的結(jié)構(gòu)方法是一塊具有名稱的代碼??梢允褂梅椒ǖ拿Q從別的地方調(diào)用代碼,也可以把數(shù)據(jù)傳入方法并接收數(shù)據(jù)輸出。方法是類的函數(shù)成員。方法主要有兩個部分:方法頭和方法體。方法頭——指定方法的特征,方法是否返回數(shù)據(jù),返回類型 方法的名稱 參數(shù)列表方法體——可執(zhí)行代碼的語句序列intMyMethod(intpar1,stringpar2)//返回類型方法名稱參數(shù)列表voidMyMethod(){Console.WriteLine("First");}//方法頭//示例2.5方法方法體內(nèi)部的代碼執(zhí)行方法體是一個由大括號括起的塊,是一個語句序列??梢园韵马椖浚壕植孔兞靠刂屏鹘Y(jié)構(gòu)方法調(diào)用內(nèi)嵌的塊其他方法,稱為局部函數(shù)示例:2.5方法局部變量和類的字段成員一樣,方法體內(nèi)部的局部變量也保存數(shù)據(jù)。字段——通常保存和對象狀態(tài)相關(guān)的數(shù)據(jù)局部變量——保存局部或臨時的計算數(shù)據(jù)表:實(shí)例字段和局部變量對比實(shí)例字段局部變量生存期從實(shí)例被創(chuàng)建時開始,直到實(shí)例不再被訪問時結(jié)束從它在塊中被聲明的那一刻開始,在塊完成執(zhí)行時結(jié)束隱式初始化初始化成該類型的默認(rèn)值沒有隱式初始化,如果變量在使用之前沒有被賦值,編譯器將會產(chǎn)生一條錯誤信息存儲區(qū)域由于實(shí)例字段是類的成員,所以所有字段都存儲在堆里,無論它們是值類型還是引用類型值類型:存儲在棧里;引用類型:引用存儲在棧里,數(shù)據(jù)存儲在堆里2.5方法局部變量局部變量的聲明與初始化:類型
變量名稱=初始值;//局部變量的聲明與初始化可以在方法體內(nèi)任意位置聲明局部變量,但必須在使用它們前聲明。局部變量的存在和生存期僅限于創(chuàng)建它的塊及其內(nèi)嵌的塊。從聲明它的那一點(diǎn)開始存在。在塊完成執(zhí)行時結(jié)束。示例:兩個局部變量的聲明和使用。第一個是int類型變量,第二個是Someclass類型變量。staticvoidMain(){intMyInt=15;MyClasssc=newMyClass();…}//方法頭//局部變量1//局部變量2類型推斷和var關(guān)鍵字:staticvoidMain(){varMyInt=15;varsc=newMyClass();…}//方法頭//局部變量1//局部變量2說明:(1)var關(guān)鍵字不是特殊變量,只是語法速記,表示任何可以從初始化語句的右邊推斷出的類型;(2)只能用于局部變量,不能用于字段;(3)只能在變量聲明中包含初始化時使用,一旦編譯器推斷出變量的類型,它就是固定且不能更改的。2.5方法局部變量嵌套塊中的局部變量:方法體內(nèi)部可以嵌套其他的塊??梢杂腥我鈹?shù)量的塊,并且它們既可以是順序的也可以是嵌套的。塊可以嵌套到任何級別。局部變量可以在嵌套塊的內(nèi)部聲明,并且和所有的局部變量一樣,它們的生存期和可見性僅限于聲明它們的塊及其內(nèi)嵌塊。圖:局部變量的生存期2.5方法局部常量局部變量:局部常量很像局部變量,只是一旦被初始化,它的值就不能改變了。如同局部變量,局部常量必須聲明在塊的內(nèi)部。常量的兩個最重要的特征:在聲明必須初始化;在聲明后不能改變。const類型
變量名稱=初始值;//局部常量的聲明與初始化初始化值是必需的生存周期:與局部變量一樣,局部常量聲明在方法體或代碼塊里,并在聲明它的塊結(jié)束的地方失效。2.5方法控制流控制流(第4章):使用選擇、循環(huán)、跳轉(zhuǎn)等語句改變代碼的執(zhí)行順序。選擇語句:if、if…else、switch迭代語句:for循環(huán)、while循環(huán)、do循環(huán)、foreach循環(huán)跳轉(zhuǎn)語句:break、continue、goto、return2.5方法方法的調(diào)用方法的調(diào)用:可以在方法體的內(nèi)部調(diào)用其他方法,調(diào)用時要使用方法名并帶上參數(shù)列表。在同一個類中調(diào)用普通方法:先實(shí)例化對象,再使用【對象.方法】調(diào)用調(diào)用靜態(tài)方法(static):直接起用【方法】調(diào)用在不同類中調(diào)用普通方法:先實(shí)例化對象,再使用【對象.方法】調(diào)用調(diào)用靜態(tài)方法:使用【類名.方法】調(diào)用2.5方法方法的調(diào)用舉例:下面的類聲明了一個名為PrintDateAndTime的方法,并在Main方法內(nèi)調(diào)用。namespaceConsoleApp1{classMyClass{voidPrintDateAndTime(){DateTimedt=DateTime.Now;Console.WriteLine($"{dt}");}staticvoidMain(){MyClassmc=newMyClass();mc.PrintDateAndTime();}}}//命名空間//聲明類//聲明方法//獲取當(dāng)前的日期和時間//輸出//聲明方法//實(shí)例化//調(diào)用方法:方法名稱.()空參數(shù)列表2.5方法方法的調(diào)用調(diào)用方法時的處理過程:(1)當(dāng)前方法的執(zhí)行在調(diào)用點(diǎn)被掛起。(2)控制轉(zhuǎn)移到被調(diào)用方法的開始。(3)被調(diào)用方法執(zhí)行直到完成。(4)控制回到發(fā)起調(diào)用的方法。圖:調(diào)用方法時的控制流2.5方法返回值返回值:方法可以向調(diào)用代碼返回一個值。返回的值被插入到調(diào)用代碼中發(fā)起調(diào)用的表達(dá)式所在的位置。要返回值,方法必須在方法名前面聲明一個返回類型。如果方法不返回值,它必須聲明void返回類型。intMyMethod(intpar1,stringpar2)//返回類型方法名稱參數(shù)列表voidMyMethod(){Console.WriteLine("First");}//方法頭//示例聲明了返回類型的方法必須使用如下形式的返回語句從方法中返回一個值或?qū)ο?。return值或?qū)ο?//返回值2.5方法返回值舉例:intGetHour(){DateTimedt=DateTime.Now;inthour=dt.Hour;returnhour;}//聲明方法//獲取當(dāng)前日期和時間//獲取小時數(shù)//返回一個int也可以返回用戶定義類型的對象。例如,下面的代碼返回一個MyClass類型的對象。MyClassMyMethod(){MyClassmc=newMyClass();…returnmc;}////返回一個MyClass對象2.5方法返回值應(yīng)用示例:獲取當(dāng)前時間的小時數(shù),并在控制臺輸出。namespaceConsoleApp8{classMyClass{publicintGetHour(){DateTimedt=DateTime.Now;inthour=dt.Hour;
returnhour;}classProgram(){staticvoidMain(){MyClassmc=newMyClass();Console.WriteLine(“Hour:{0}”,mc.GetHour());}}}}//////////獲取當(dāng)前日期和時間//獲取小時數(shù)//返回小時數(shù)//創(chuàng)建MyClass類實(shí)例//調(diào)用GetHour()方法2.5方法局部函數(shù)局部函數(shù):從C#7.0開始,我們可以在方法內(nèi)部聲明另一個方法(嵌套),嵌套的方法只能在包含他的方法內(nèi)部調(diào)用,并稱為局部函數(shù)。與局部變量必須在使用前聲明不同,局部函數(shù)可在包含方法內(nèi)部的任意位置聲明。namespaceConsoleApp1{classProgram{publicvoidMethodWithLocalFunction(){
intMyLocalFunction(intz1){returnz1*5;}intresults=MyLocalFunction(5);Console.WriteLine($"調(diào)用局部函數(shù)結(jié)果:{results}");}staticvoidMain(string[]args){ProgrammyProgram=newProgram();myProgram.MethodWithLocalFunction();}}}//////////聲明局部函數(shù)//////調(diào)用局部函數(shù)//調(diào)用方法2.5方法參數(shù)參數(shù):在方法開始執(zhí)行時把數(shù)據(jù)傳入方法的變量。形參:形參是局部變量,它聲明在方法的參數(shù)列表中。namespaceConsoleApp1{classProgram{publicvoidMethodWithLocalFunction(){
intMyLocalFunction(intz1){returnz1*5;}intresults=MyLocalFunction(5);Console.WriteLine($"調(diào)用局部函數(shù)結(jié)果:{results}");}staticvoidMain(string[]args){ProgrammyProgram=newProgram();myProgram.MethodWithLocalFunction();}}}//////////聲明局部函數(shù),intz1為形參聲明//語法:變量類型變量名稱////調(diào)用局部函數(shù)//調(diào)用方法2.5方法參數(shù)參數(shù):在方法開始執(zhí)行時把數(shù)據(jù)傳入方法的變量。形參:形參是局部變量,它聲明在方法的參數(shù)列表(方法名稱后面的括號)中,稱為形參(Formalparameter)。因?yàn)樾螀⑹亲兞浚运鼈冇蓄愋秃兔Q,并能被寫入和讀取;和方法中的其他局部變量不同,參數(shù)在方法體的外面定義并在方法開始之前初始化(輸出參數(shù)除外)參數(shù)列表中可以聲明任意數(shù)量的形參,形參之間用逗號隔開;形參可以在整個方法體內(nèi)使用,就像局部變量一樣。publicvoidPrintSum(intx,inty){intsum=x+y;Console.WriteLine($“Newsflash:
{x}+{y}is{sum}”);}//定義多個形參////調(diào)用形參//再次調(diào)用形參實(shí)參:當(dāng)代碼調(diào)用一個方法時,形參的值必須在方法的代碼開始執(zhí)行之前初始化。用于初始化形參的表達(dá)式或變量稱作實(shí)參(actualparameter,有時也稱argument)。實(shí)參位于方法調(diào)用的參數(shù)列表中。每個實(shí)參必須與對應(yīng)形參的類型相匹配,或編譯器必須能夠把實(shí)參隱式轉(zhuǎn)換為那個類型(強(qiáng)/弱)。PrintSum(5,someInt);//調(diào)用帶有形參的方法時要代入類型匹配的形參,用于形參的初始化2.5方法參數(shù)調(diào)用方法:publicvoidPrintSum(intx,inty){intsum=x+y;Console.WriteLine($“Newsflash:
{x}+{y}is{sum}”);}//定義多個形參////調(diào)用形參//再次調(diào)用形參PrintSum(5,someInt);//調(diào)用帶有形參的方法時要代入類型匹配的形參,用于形參的初始化2.5方法參數(shù)示例:namespaceConsoleApp1{classMyClass{publicintSum(intx,inty){returnx+y;}publicfloatAvg(floatinput1,floatinput2){return(input1+input2)/2;}}classProgram{staticvoidMain(){MyClassMyT=newMyClass();intsomeInt=6;floatsomeFloat1=5,someFloat2=6;intMySum=MyT.Sum(5,someInt);floatMyAverage=MyT.Avg(someFloat1,someFloat2);Console.WriteLine($"Sum:{MySum};Average:{MyAverage}");}}}//定義多個形參////調(diào)用形參//再次調(diào)用形參//聲明方法//返回兩個參數(shù)的和//聲明方法//返回兩個參數(shù)的平均值//調(diào)用方法//2.5方法參數(shù)值參數(shù):方法參數(shù)默認(rèn)類型為值參數(shù)(valueparameter),值參數(shù)可以是值類型或引用類型(所謂值類型,就是指類型本身包含其值)。當(dāng)使用值參數(shù)時,會把實(shí)參的值復(fù)制給形參,方法被調(diào)用時,系統(tǒng)執(zhí)行以下操作:在棧中為形參分配空間;將實(shí)參的值(值類型)或引用(引用類型)復(fù)制給形參。值參數(shù)的實(shí)參不一定是變量,它可以是任何能計算成相應(yīng)數(shù)據(jù)類型的表達(dá)式(比如(int1+int2)/2)。用作實(shí)參之前,變量必須被賦值(除非是輸出參數(shù)),對于引用類型,變量可以被設(shè)置為一個實(shí)際的引用或null。2.5方法參數(shù)示例:namespaceConsoleApp1{classMyClass{publicintVal=20;}classProgram{staticvoidMyMethod(MyClassf1,intf2){f1.Val=f1.Val+5;f2=f2+5;Console.WriteLine($"f1.Val:{f1.Val},f2:{f2}");}staticvoidMain(){MyClassa1=newMyClass();inta2=10;MyMethod(a1,a2);Console.WriteLine($"a1.Val:{a1.Val};a2:{a2}");}}}//////聲明類////聲明字段////聲明方法//引用類型的字段+5//值類型+5//實(shí)例化//聲明局部變量//調(diào)用方法2.5方法參數(shù)示例:namespaceConsoleApp1{classMyClass{publicintVal=20;}classProgram{staticvoidMyMethod(MyClassf1,intf2){f1.Val=f1.Val+5;f2=f2+5;Console.WriteLine($"f1.Val:{f1.Val},f2:{f2}");}staticvoidMain(){MyClassa1=newMyClass();inta2=10;MyMethod(a1,a2);Console.WriteLine($"a1.Val:{a1.Val};a2:{a2}");}}}//////聲明類////聲明字段////聲明方法//引用類型的字段+5//值類型+5//實(shí)例化//聲明局部變量//調(diào)用方法2.5方法參數(shù)示例:namespaceConsoleApp1{classMyClass{publicintVal=20;}classProgram{staticvoidMyMethod(MyClassf1,intf2){f1.Val=f1.Val+5;f2=f2+5;Console.WriteLine($"f1.Val:{f1.Val},f2:{f2}");}staticvoidMain(){MyClassa1=newMyClass();inta2=10;MyMethod(a1,a2);Console.WriteLine($"a1.Val:{a1.Val};a2:{a2}");}}}//////////////////值類型+5//實(shí)例化//聲明局部變量//調(diào)用方法2.5方法參數(shù)分析:在方法被調(diào)用前,用作實(shí)參的變量a1、a2已經(jīng)在棧里了。在方法開始時,系統(tǒng)在棧中為形參分配空間,并從實(shí)參復(fù)制值。因?yàn)閍1是引用類型的,所以引用被復(fù)制,結(jié)果實(shí)參和形參都引用堆中的同一個對象。因?yàn)閍2是值類型的,所以值被復(fù)制,產(chǎn)生了一個獨(dú)立的數(shù)據(jù)項。在方法的結(jié)尾,f2和對象f1的字段都被加上了5.方法執(zhí)行后,形參從棧中彈出。a2,值類型,它的值不受方法行為的影響。a1,引用類型,但它的值被方法的行為改變了。2.5方法參數(shù)引用參數(shù):使用引用參數(shù)時,必須在方法的聲明和調(diào)用中都使用**ref修飾符**實(shí)參必須是變量,在用作實(shí)參前必須被賦值。如果是引用類型變量,可以賦值為一個引用或null不會在棧上為形參分配內(nèi)存,形參的參數(shù)名將作為實(shí)參變量的別名,指向相同的內(nèi)存位置。由于形參名和實(shí)參名指向相同的內(nèi)存位置,所以在方法的執(zhí)行過程中對形參做的任何改變在方法完成后依然可見(表現(xiàn)在實(shí)參變量上)。2.5方法參數(shù)示例:namespaceConsoleApp1{classMyClass{publicintVal=20;}classProgram{staticvoidMyMethod(refMyClassf1,refintf2){f1.Val=f1.Val+5;f2=f2+5;Console.WriteLine($"f1.Val:{f1.Val},f2:{f2}");}staticvoidMain(){MyClassa1=newMyClass();inta2=10;MyMethod(refa1,refa2);Console.WriteLine($"a1.Val:{a1.Val};a2:{a2}");}}}//////////////////值類型+5//實(shí)例化//聲明局部變量//調(diào)用方法2.5方法參數(shù)分析:在方法被調(diào)用前,用作實(shí)參的變量a1、a2已經(jīng)在棧里了。在方法的開始,形參名被設(shè)置為實(shí)參的別名。變量a1和f1引用相同的內(nèi)存位置,a2和f2引用相同的內(nèi)存位置。在方法的結(jié)束位置,f2和f1的對象的字段都被加上了5。方法執(zhí)行之后,形參的名稱已經(jīng)失效,但是值類型a2的值和引用類型a1所指向的對象的值都被方法內(nèi)的行為改變了。結(jié)果:使用值參數(shù),在方法運(yùn)行后,值類型在棧中不會改變,而引用類型的數(shù)據(jù)在堆中被改變。使用引用參數(shù)(ref修飾符),值類型在棧中也會被改變,引用類型的數(shù)據(jù)在堆中也被改變。2.5方法參數(shù)輸出參數(shù):輸出參數(shù)使用out關(guān)鍵字,它的效果與引用參數(shù)幾乎相同,不同點(diǎn)是:引用參數(shù)的實(shí)參必須是已經(jīng)賦值的變量,而輸出參數(shù)不必。方法使用輸出參數(shù)時,應(yīng)該把它看作是未賦值的變量。和引用參數(shù)相同,實(shí)參必須是變量,而不能是其他類型的表達(dá)式,因?yàn)榉椒ㄐ枰獌?nèi)存位置來保存返回值與引用參數(shù)類似,輸出參數(shù)的形參充當(dāng)實(shí)參的別名。形參和實(shí)參都是同一塊內(nèi)存位置的名稱。顯然,在方法內(nèi)對形參做的任何改變在方法執(zhí)行完成之后(通過實(shí)參變量)都是可見的。與引用參數(shù)不同,輸出參數(shù)有以下要求。在方法內(nèi)部,給輸出參數(shù)賦值之后才能讀取它。這意味著參數(shù)的初始值是無關(guān)的,而且沒有必要在方法調(diào)用之前為實(shí)參賦值。因?yàn)榉椒▋?nèi)的代碼在讀取輸出參數(shù)之前必須對其寫入,所以不可能使用輸出參數(shù)把數(shù)據(jù)傳入方法。在方法內(nèi)部,在方法返回之前,代碼中每條可能的路徑都必須為所有輸出參數(shù)賦值。publicvoidAdd2(outintoutValue){intvar1=outvalue+2;}//輸出參數(shù)////出錯!調(diào)用前必須賦值2.5方法參數(shù)示例:namespaceConsoleApp1{classMyClass{publicintVal=20;}classProgram{staticvoidMyMethod(outMyClassf1,outintf2){f1=newMyClass();f1.Val=25;f2=15;Console.WriteLine($"f1.Val:{f1.Val},f2:{f2}");}staticvoidMain(){MyClassa1=null;inta2;MyMethod(outa1,outa2);Console.WriteLine($"a1.Val:{a1.Val};a2:{a2}");}}}////////////////創(chuàng)建一個類變量,并賦值給輸出參數(shù)f1//為輸出參數(shù)f1的字段賦值//為輸出參數(shù)f2賦值//實(shí)例化//聲明局部變量//調(diào)用方法2.5方法參數(shù)分析:在方法調(diào)用之前,將要被用作實(shí)參的變量a1和a2已經(jīng)在棧里了。在方法的開始,形參的名稱被設(shè)置為實(shí)參的別名。你可以認(rèn)為變量a1和f指向的是相同的內(nèi)存位置,也可以認(rèn)為a2和f2指向的是相同的內(nèi)存位置。a1和a2不在作用域之內(nèi),所以不能在MyMethod中訪問。在方法內(nèi)部,代碼創(chuàng)建了一個MyClass類型的對象并把它賦值給f1.然后賦一個值給f1的字段,也賦一個值給f2.對f1和f2的賦值都是必需的,因?yàn)樗鼈兪禽敵鰠?shù)。方法執(zhí)行之后,形參的名稱已經(jīng)失效,但是引用類型的a1和值類型的a2的值都被方法內(nèi)的行為改變了。結(jié)果:輸出參數(shù)使用out關(guān)鍵字,它的效果與引用參數(shù)幾乎相同,但在方法內(nèi)使用它時必須先進(jìn)行賦值2.5方法參數(shù)參數(shù)數(shù)組:參數(shù)數(shù)組允許特定類型的0個或多個實(shí)參對應(yīng)一個形參(數(shù)組)。其重點(diǎn)如下:聲明參數(shù)數(shù)組:在形參的數(shù)據(jù)類型前使用params修飾符,在數(shù)據(jù)類型后放置一組空的方括號publicvoidListInts(paramsint[]intVals){…}//聲明參數(shù)數(shù)組//////類型名后面的空方括號指明了參數(shù)是一個整數(shù)數(shù)組(數(shù)組將在第6章詳細(xì)閘述)。而現(xiàn)在,你需要了解的內(nèi)容如下:數(shù)組是一組有序的同一類型的數(shù)據(jù)項。數(shù)組使用一個數(shù)字索引進(jìn)行訪問。數(shù)組是一個引用類型,因此它的所有數(shù)據(jù)項都保存在堆中。注意:在一個參數(shù)列表中,只能有一個參數(shù)數(shù)組,且必須是列表中的最后一個由參數(shù)數(shù)組表示的所有參數(shù)必須是同一類型2.5方法參數(shù)數(shù)組參數(shù)的調(diào)用:數(shù)組參數(shù)的方法調(diào)用時,實(shí)參有兩種方式第1種,使用獨(dú)立實(shí)參:數(shù)量可從0~多個,但元素類型必須是方法聲明中指定的類型。publicvoidListInts(paramsint[]intVals){…}…ListInts();ListInts(1,2);ListInts(1,2,3,4,5…);//聲明參數(shù)數(shù)組//////在使用獨(dú)立實(shí)參時,編譯器做下面幾件事:接受實(shí)參列表,用它們在堆中創(chuàng)建并初始化一個數(shù)組,并將數(shù)組的引用賦值給形參;把數(shù)組的引用保存到棧中的形參里;如果在對應(yīng)形參數(shù)組的位置沒有實(shí)參,編譯器會創(chuàng)建一個有零個元素的數(shù)組來使用。2.5方法參數(shù)示例:namespaceConsoleApp1{classMyClass{publicvoidListInts(paramsint[]intVals){if((intVals!=null)&&(intVals.Length>0))for(inti=0;i<intVals.Length;i++){intVals[i]=intVals[i]*10;Console.WriteLine(intVals[i]);}}}classProgram{staticvoidMain(){intfirst=5,second=6,third=7;
MyClassmc=newMyClass();mc.ListInts(first,second,third);Console.WriteLine($"{first},{second},{third}");}}}//////////聲明參數(shù)數(shù)組//處理數(shù)組//調(diào)用方法2.5方法參數(shù)分析:口方法調(diào)用之前,3個實(shí)參已經(jīng)在棧里。在方法的開始,3個實(shí)參被用于初始化堆中的數(shù)組,并且數(shù)組的引用被賦值給形參intVals。在方法內(nèi)部,代碼首先檢查以確認(rèn)數(shù)組引用不是null,然后處理數(shù)組,把每個元素乘以10并保存回去。方法執(zhí)行之后,形參intVals失效。說明:關(guān)于參數(shù)數(shù)組,需要記住的一點(diǎn)是當(dāng)數(shù)組在堆中被創(chuàng)建時,實(shí)參的值被復(fù)制到數(shù)組中。這樣,它們像值參數(shù)。如果數(shù)組參數(shù)是值類型,那么值被復(fù)制,實(shí)參在方法內(nèi)部不受影響??谌绻麛?shù)組參數(shù)是引用類型,那么引用被復(fù)制,實(shí)參引用的對象在方法內(nèi)部會受到影響。2.5方法參數(shù)數(shù)組參數(shù)的調(diào)用:第2種,使用數(shù)組:也可以在方法調(diào)用之前創(chuàng)建并組裝一個數(shù)組,把單一的數(shù)組變量作為實(shí)參傳遞。這種情況下編譯器使用你的數(shù)組而不是重新創(chuàng)建一個。publicvoidListInts(paramsint[]intVals){…}…staticvoidMain(){int[]MyArr=newint[]{5,6,7};MyClassmc=newMyClass();mc.ListInts(MyArr);foreach(intxinMyArr)Console.WriteLine($"{x}");}//聲明參數(shù)數(shù)組////////創(chuàng)建并初始化數(shù)組//使用數(shù)組作為實(shí)參說明:數(shù)組參數(shù)是引用類型,那么引用被復(fù)制,實(shí)參的數(shù)據(jù)項受到了影響。2.5方法參數(shù)類型總結(jié):參數(shù)類型修飾符是否在調(diào)用時使用執(zhí)行值無系統(tǒng)把實(shí)參的值復(fù)制到形參引用ref是形參是實(shí)參的別名輸出out是形參是實(shí)參的別名(使用前需賦值)數(shù)組params否允許傳遞可變數(shù)目的實(shí)參到方法2.5方法方法重載定義:一個類中可以有多個同名方法,這叫作方法重載(methodoverloading)。使用相同名稱的每個方法必須有一個和其他方法不同的簽名(signature),否則會產(chǎn)生錯誤,即非法重載。方法的簽名由下列信息組成,它們在方法聲明的方法頭中: 方法的名稱: 參數(shù)的數(shù)目: 參數(shù)的數(shù)據(jù)類型和順序: 參數(shù)修飾符。返回類型不是簽名的一部分,而我們往往誤認(rèn)為它是簽名的一部分。-請注意,形參的名稱也不是簽名的一部分。longAddValues(inta,intb){returna+b;}longAddValues(intc,intd,inte){returnc+d+e};voidAddValues(stringf){Console.WriteLine(“error”);}intAddValues(intp,refintq){returnp+q};intAddValues(inth,intm){returnh+m;}////////分析:1、2、3、4可以重載1、5不可以重載2.5方法方法重載場景:程序員被逼瘋!當(dāng)看到用戶使用他們開發(fā)的產(chǎn)品時……2.5方法方法重載場景:比如,檢索姓名或?qū)W號;處理不同類型數(shù)據(jù)的輸入順序;處理excel信息等。比如現(xiàn)在有如下方法列表,他們的功能都一樣,根據(jù)傳入的參數(shù)不同有對應(yīng)的處理邏輯,并返回int結(jié)果(比如Console.WriteLine()方法,可以接收任意數(shù)量和類型的參數(shù)):publicinthandle(inta)publicinthandle(Stringnum)publicinthandle(floata)publicinthandle(inta,intb)...////////你在調(diào)用的時候只考慮給函數(shù)對應(yīng)的參數(shù)列表就好了,完全不需要找差異化的函數(shù)名,它會自動匹配函數(shù)然后走對應(yīng)的邏輯并return正確的結(jié)果。方法重載的好處:1.減少類的對外接口(只顯示一個方法),降低類的復(fù)雜度。2.便于用戶使用(相同功能的方法名稱一樣)和識別。3.提高程序的可讀性和復(fù)用性2.5方法方法重載示例:namespaceConsoleApp11{publicclassRestaurant{publicvoidorder(Stringdish){Console.WriteLine("點(diǎn)菜:"+dish);
}publicvoidorder(Stringdish,intquantity){Console.WriteLine("點(diǎn)菜:"+dish+",數(shù)量:"+quantity);//具體的點(diǎn)菜操作
}publicvoidorder(Stringdish,StringspecialRequest){Console.WriteLine("點(diǎn)菜:"+dish+",特殊要求:"+specialRequest);//具體的點(diǎn)菜操作
}}internalclassProgram{staticvoidMain(string[]args){Restaurantrestaurant=newRestaurant();restaurant.order("牛排");restaurant.order("披薩",2);restaurant.order("雞肉","不要辣");}}}////////聲明重載方法//具體的點(diǎn)菜操作//調(diào)用重載方法2.5方法位置參數(shù)與命名參數(shù)位置參數(shù):實(shí)參的數(shù)量和形參的數(shù)量一致,且類型也與對應(yīng)的實(shí)參一致。這種形式的參數(shù)中心人物位置參數(shù)。命名參數(shù):顯式指定形參的名字。可以任意順序在方法中列出實(shí)參。使用方法:形參:參數(shù)classMyClass{publicintCalc(inta,intb,intc){return(a+b)*c;}staticvoidMain(){MyClassmc=newMyClass();intresult=mc.Calc(c:2,a:4,b:3);Console.WriteLine(result);}}////////2.5方法命名參數(shù)命名參數(shù):顯式指定形參的名字??梢匀我忭樞蛟诜椒ㄖ辛谐鰧?shí)參。使用方法:形參:參數(shù)classMyClass{publicintCalc(inta,intb,intc){return(a+b)*c;}staticvoidMain(){MyClassmc=newMyClass();intresult=mc.Calc(c:2,a:4,b:3);Console.WriteLine(result);}}//////////命名參數(shù)//位置參數(shù):intresult=mc.Calc(4,3,2);說明:在調(diào)用的時候,你可以同時使用位置參數(shù)和命名參數(shù),但所有位置參數(shù)必須先列出。intresult=mc.Calc(4,c:2,b:3);intresult=mc.Calc(4,b:3,2);intresult=mc.Calc(4,2,b:3);//正確//正確//錯誤!2.5方法命名參數(shù)命名參數(shù):顯式指定形參的名字??梢匀我忭樞蛟诜椒ㄖ辛谐鰧?shí)參。使用方法:形參:參數(shù)namespaceConsoleApp1{classMyClass{doubleGetCylinderVolume(doubleradius,doubleheight){return3.1416*radius*radius*height;}staticvoidMain(string[]args){MyClassmc=newMyClass();doublevolume;volume=mc.GetCylinderVolume(3.0,4.0);//volume=mc.Getcylindervolume(radius:3.0,height:4.0);Console.WriteLine(volume);}}}////////////說明:顯式調(diào)用具有更多信息,更不易出錯。2.5方法可選參數(shù)可選參數(shù):為形參提供默認(rèn)值,在調(diào)用方法可省略為該參數(shù)賦值,這樣的參數(shù)稱為可選參數(shù)(optionalparameter)。namespaceConsoleApp1{classMyClass{doubleGetCylinderVolume(doubleradius,doubleheight=4){return3.1416*radius*radius*height;}staticvoidMain(string[]args){MyClassmc=newMyClass();doublevolume;//volume=mc.GetCylinderVolume(3.0,4.0);volume=mc.GetCylinderVolume(3.0);Console.WriteLine(volume);}}}//////////height:可選參數(shù)////省略height2.5方法可選參數(shù)可選參數(shù):為形參提供默認(rèn)值,在調(diào)用方法可省略為該參數(shù)賦值,這樣的參數(shù)稱為可選參數(shù)(optionalparameter)。重要事項:只有值參數(shù)可設(shè)置可選參數(shù)(引用參數(shù)ref/輸出參數(shù)out/數(shù)組參數(shù)params都不可以)聲明順序:必填參數(shù)可選參數(shù)params數(shù)組參數(shù)有多個可選參數(shù)時,只能從最后開始省略1~n個可選參數(shù),不能隨意省略中間的可選參數(shù)。當(dāng)確實(shí)需要省略中間位置的可選參數(shù)時,須使用可選參數(shù)的名字來消除賦值的歧義。2.5方法可選參數(shù)可選參數(shù):為形參提供默認(rèn)值,在調(diào)用方法可省略為該參數(shù)賦值,這樣的參數(shù)稱為可選參數(shù)(optionalparameter)。namespaceConsoleApp1{classMyClass{doubleGetCylinderVolume(doubleradius=3,doubleheight=4){return3.1416*radius*radius*height;}staticvoidMain(string[]args){MyClassmc=newMyClass();doublevolume;//volume=mc.GetCylinderVolume(3.0,4.0);volume=mc.GetCylinderVolume(height:4.0);Console.WriteLine(volume);}}}//////////height:可選參數(shù)////省略radius2.6屬性屬性屬性:屬性是一種函數(shù)成員,是一組(set、get)匹配的、命名的、稱為訪問器的方法。其中,set訪問器為屬性賦值,get訪問器為屬性獲取值。使用屬性就像寫入或讀取一個字段,并且通常與某一字段(稱為后備字段)關(guān)聯(lián)。示例:classMyClass{publicintMyInt1;
privateint_MyInt2;publicintMyInt2{set{_MyInt2=value;}get{returnthe_MyInt2;}}}//////聲明一個公有字段//聲明一個私有字段(后備字段)////聲明與之關(guān)聯(lián)的屬性//value是一個隱式參數(shù),在塊的內(nèi)部,可以像使用普通變量那樣使用value,包括賦值MyClassmc=newMyClass()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 考點(diǎn)攻克蘇科版八年級物理下冊《物質(zhì)的物理屬性》綜合測評練習(xí)題(含答案詳解)
- 護(hù)理糾紛的考試題及答案
- 平度初三中考試卷及答案
- 2025近五年初會考試真題及答案
- 烘焙工坊考試題及答案
- 2025換屆考試真題及答案詳解
- 廣西安全員證題庫考試試題及答案
- 四級考試第一套試卷及答案
- 彬縣二年級考試試題及答案
- 2025年自考本科電力系統(tǒng)分析考試題及答案
- 高電位治療課件
- 常見全身疾病的眼部表現(xiàn)
- 高校PPT課件:跨國公司經(jīng)營與管理(第四版)
- 《公共事業(yè)管理概論》課件
- S001840D+SL基礎(chǔ)維修與調(diào)整
- 2023年中國進(jìn)出口銀行招聘筆試題庫及答案解析
- SB/T 10399-2005牦牛肉
- GB 2762-2005食品中污染物限量
- 停車場工程招投標(biāo)書范本
- 陜西省中小學(xué)教師校本研修30問
- 網(wǎng)關(guān)防火墻tn-sg3000x800產(chǎn)品白皮書
評論
0/150
提交評論