第6章面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁
第6章面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁
第6章面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁
第6章面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁
第6章面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計(jì)算機(jī)應(yīng)用與基礎(chǔ)(2)C#程序設(shè)計(jì)

C#ProgrammingLanguage梅松青:2017-2廣州醫(yī)科大學(xué)信息技術(shù)教研室

面向?qū)ο蟪绦蛟O(shè)計(jì)第

章6.1面向?qū)ο蟪绦蛟O(shè)計(jì)概述6.2類和對(duì)象6.3構(gòu)造函數(shù)和析構(gòu)函數(shù)6.4方法6.5屬性(1)了解面向?qū)ο蟮囊恍┗靖拍?。?)熟練掌握類的聲明與類的可訪問性控制。(3)熟練掌握類的成員及其作用。(4)熟練掌握對(duì)象的概念和創(chuàng)建對(duì)象的方法。(5)理解作用域的概念。本章學(xué)習(xí)目標(biāo):6.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念思考:

汽車是怎么制造出來的?6.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念在一條生產(chǎn)線上,分部件,順序的生產(chǎn)?我們目前的編程方式缺點(diǎn)?6.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念分若干條生產(chǎn)線,每個(gè)生產(chǎn)線負(fù)責(zé)一個(gè)部件,最后組裝成一輛汽車?每一個(gè)部件——對(duì)象每一個(gè)部件是如何生產(chǎn)出來的?根據(jù)設(shè)計(jì)圖紙——類面向?qū)ο蠓椒ㄊ且环N以對(duì)象為中心認(rèn)識(shí)客觀世界的方法,它以類和對(duì)象為基本構(gòu)成元素,從結(jié)構(gòu)組織角度來模擬客觀世界,把世界看成是由許多不同種類的對(duì)象構(gòu)成的,每個(gè)對(duì)象都有自己的內(nèi)部狀態(tài)和運(yùn)行規(guī)律。6.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念面向?qū)ο竺嫦驅(qū)ο蟮姆椒ǚ先祟惖乃季S方式,能夠自然表現(xiàn)現(xiàn)實(shí)世界中的實(shí)體和問題,在自然世界和社會(huì)生活中,一個(gè)復(fù)雜的事物總是由許多部分組成的。當(dāng)人們生產(chǎn)汽車時(shí),分別設(shè)計(jì)和制造發(fā)動(dòng)機(jī)、底盤、車身和輪子,最后把它們組裝在一起。在組裝時(shí),各部分之間有一定的聯(lián)系,以便協(xié)調(diào)工作。面向?qū)ο?.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念1、類和對(duì)象通常把具有相同性質(zhì)和功能的事物所構(gòu)成的整體稱為類。類(class)是對(duì)具有相同特征的一類事物所做的抽象例如:汽車類、人類1、類和對(duì)象對(duì)象(Object)是系統(tǒng)中描述客觀事物的一個(gè)實(shí)體,是類的實(shí)例化。例如:中國人、卡車注意:要使用對(duì)象,必須先定義類,然后再創(chuàng)建對(duì)象。1、類和對(duì)象要使用對(duì)象,必須先定義類,然后再創(chuàng)建對(duì)象。

int

是一個(gè)整數(shù)類,定義了整數(shù)的性質(zhì),能對(duì)整數(shù)進(jìn)行的操作

inta;定義一個(gè)整數(shù)的對(duì)象a=10;應(yīng)用對(duì)象1、類和對(duì)象類代表一個(gè)抽象的概念或事物,對(duì)象是在客觀世界中實(shí)際存在的類的實(shí)例。類體現(xiàn)了人們認(rèn)識(shí)事物的基本思維方法:分類。類是靜態(tài)的,類的存在、語義和關(guān)系在程序執(zhí)行前就已經(jīng)定義好了。對(duì)象是動(dòng)態(tài)的,對(duì)象在程序執(zhí)行時(shí)可以被創(chuàng)建和刪除。屬性:是對(duì)象的狀態(tài)和特征。如學(xué)生類的實(shí)體有姓名、學(xué)號(hào)等特征。方法:是對(duì)對(duì)象能夠進(jìn)行的操作,它體現(xiàn)了對(duì)象的功能。如增加一個(gè)學(xué)生。2、屬性、方法142、屬性、方法封裝就是將描述事物的數(shù)據(jù)和行為(操作或功能)相結(jié)合,形成一個(gè)有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。封裝的目的是增強(qiáng)安全性和簡化編程,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只是要通過外部接口,一特定的訪問權(quán)限來使用類的成員。3、封裝在組裝汽車的過程中,工人要明白各個(gè)部件是怎么生產(chǎn)的嗎?各個(gè)部件的具體屬性?3、封裝工人只要明白各個(gè)部件的接口是什么。然后組裝在一起。一個(gè)新類繼承了原來類的所有的屬性和操作,并且增加了自己的新屬性和新操作,則該新類成為派生類,原來的類稱為派生類的基類。繼承表示現(xiàn)實(shí)世界中遺傳關(guān)系的直接模擬。4、繼承4、繼承

多態(tài)性是指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不同數(shù)據(jù)類型或表現(xiàn)出不同的行為。就是程序在運(yùn)行時(shí),會(huì)自動(dòng)判斷對(duì)象的派生類型,并調(diào)用相應(yīng)的方法。5、多態(tài)性多態(tài)性是指相同的操作、方法或者過程可作用于多種類型的對(duì)象上并獲得不同的結(jié)果。5、多態(tài)性。維護(hù)簡單??蓴U(kuò)充性。代碼重用。面向?qū)ο蟮膬?yōu)點(diǎn)6.2類和對(duì)象類的聲明語法格式如下:[類的修飾符]class

類名[:基類名]{

//類的成員;}[;]1、類的聲明6.2類和對(duì)象類的修飾符說明public公有類。表示不受限制對(duì)該類的訪問。protected保護(hù)類。表示只能從所在類和所在類派生的子類進(jìn)行訪問。internal內(nèi)部類。只有其所在類才能訪問。訪問僅限于當(dāng)前程序集,即只可以被本組合體(Assembly)內(nèi)所有的類存取private私有類。只有該類才能訪問。默認(rèn)abstract抽象類。表示該類是一個(gè)不完整的類,不允許建立類的實(shí)例。sealed密封類。不允許從該類派生新的類。1、類的聲明類的可訪問性修飾符例如,以下聲明了一個(gè)Person類:

publicclassPerson

{ publicintpno; //編號(hào)

publicstringpname; //姓名

publicvoidsetdata(intno,stringname) {

pno=no;pname=name; } publicvoiddispdata() {

Console.WriteLine("{0}{1}",pno,pname); }

}1、類的聲明你希望別人知道你的年齡、身高、體重等私人信息嗎?類的成員說明變量字段存儲(chǔ)類要滿足其設(shè)計(jì)所需要的數(shù)據(jù),亦稱為數(shù)據(jù)成員。屬性屬性是類中可以像類中的字段一樣被訪問的方法。屬性可以為類字段提供保護(hù),避免字段在對(duì)象不知道的情況下被更改。方法方法定義類可以執(zhí)行的操作。方法可以接受提供輸入數(shù)據(jù)的參數(shù),并且可以通過參數(shù)返回輸出數(shù)據(jù)。方法還可以不使用參數(shù)而直接返回值。事件事件是向其他對(duì)象提供有關(guān)事件發(fā)生(如單擊按鈕或成功完成某個(gè)方法)通知的一種方式。索引器索引器允許以類似于數(shù)組的方式為對(duì)象建立索引。運(yùn)算符運(yùn)算符是對(duì)操作數(shù)執(zhí)行運(yùn)算的術(shù)語或符號(hào),如+、*、<

等。構(gòu)造函數(shù)構(gòu)造函數(shù)是在第一次創(chuàng)建對(duì)象時(shí)調(diào)用的方法。它們通常用于初始化對(duì)象的數(shù)據(jù)。析構(gòu)函數(shù)析構(gòu)函數(shù)是當(dāng)對(duì)象即將從內(nèi)存中移除時(shí)由運(yùn)行庫執(zhí)行引擎調(diào)用的方法。它們通常用來確保需要釋放的所有資源都得到了適當(dāng)?shù)奶幚怼?、類的成員類的成員可以分為類本身所聲明的成員和從基類中繼承的成員兩大類。類成員的修飾符說明public公有成員。提供了類的外部界面,允許類的使用者從外部進(jìn)行訪問,這是限制最少的一種訪問方式。private私有成員(默認(rèn)的)。僅限于類中的成員可以訪問,從類的外部訪問私有成員是不合法的,如果在聲明中沒有出現(xiàn)成員的訪問修飾符,按照默認(rèn)方式成員為私有的。protected保護(hù)成員。這類成員不允許外部訪問,但允許其派生類成員訪問。internal內(nèi)部成員。允許同一個(gè)命名空間中的類訪問。readonly只讀成員。這類成員的值只能讀,不能寫。也就是說,除了賦予初始值外,在程序的任何部分將無法更改這個(gè)成員的值。2、類的成員類成員的可訪問性修飾符【例6.1】設(shè)計(jì)一個(gè)控制臺(tái)應(yīng)用程序,說明調(diào)用對(duì)象屬性訪問修飾符的作用。定義一個(gè)表示坐標(biāo)點(diǎn)的類,可以設(shè)置點(diǎn)的位置,顯示點(diǎn)的坐標(biāo)。publicclassTPoint//聲明類TPoint{privateintx;//類的私有字段

publicinty;

//類的公有字段

publicvoidsetpoint(intx1,inty1){ x=x1;y=y1;}publicvoiddispoint(){Console.WriteLine("({0},{1})",x,y);}}classProgram{staticvoidMain(string[]args){TPointp1=newTPoint(); //定義對(duì)象p1

p1.x=8;p1.y=3; Console.Write("第一個(gè)點(diǎn)=>"); p1.dispoint(); TPointp2=newTPoint(); //定義對(duì)象p2

p2.setpoint(2,6); Console.Write("第二個(gè)點(diǎn)=>"); p2.dispoint();}}3、對(duì)象

一旦聲明了一個(gè)類,就可以用它作為數(shù)據(jù)類型來定義類對(duì)象(簡稱為對(duì)象)。定義類的對(duì)象分以下兩步:1)定義對(duì)象引用其語法格式如下:

類名對(duì)象名;例如,以下語句定義Person類的對(duì)象引用p:

Personp;(1)定義類的對(duì)象3、對(duì)象

一旦聲明了一個(gè)類,就可以用它作為數(shù)據(jù)類型來定義類對(duì)象(簡稱為對(duì)象)。定義類的對(duì)象分以下兩步:2)創(chuàng)建類的實(shí)例其語法格式如下:對(duì)象名=new類名();例如,以下語句創(chuàng)建Person類的對(duì)象實(shí)例:

p=newPersone();(1)定義類的對(duì)象以上兩步也可以合并成一步。其語法格式如下:類名對(duì)象名=new類名();例如:Personp=newPerson();理解對(duì)象引用和類實(shí)例的區(qū)別。兩個(gè)對(duì)象引用可以引用同一個(gè)對(duì)象,例如:Personp1=newPerson();Personp2=p1;(1)定義類的對(duì)象訪問對(duì)象字段的語法格式如下:

對(duì)象名.字段名其中,“.”是一個(gè)運(yùn)算符,該運(yùn)算符的功能是表示對(duì)象的成員。例如,前面定義的p對(duì)象的成員變量表示為:

p.pno,p.pname(2)訪問對(duì)象的字段調(diào)用對(duì)象的方法的語法格式如下:對(duì)象名.方法名(參數(shù)表)例如,調(diào)用前面定義的p對(duì)象的成員方法setdata為:

p.setdata(101,"Mary");(3)調(diào)用對(duì)象的方法【例6.5】設(shè)計(jì)一個(gè)控制臺(tái)應(yīng)用程序,說明調(diào)用對(duì)象方法的過程。定義一個(gè)表示畫筆的類,可以設(shè)置、顯示畫筆的顏色和價(jià)格。6.3構(gòu)造函數(shù)和析構(gòu)函數(shù)在用類定義對(duì)象的時(shí)候,如果忘記了初始化會(huì)出現(xiàn)什么問題?在對(duì)象使用完之后時(shí)候,你用new方法申請(qǐng)的內(nèi)存該怎么還給計(jì)算機(jī)?6.3構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)(constructor)是在創(chuàng)建給定類型的對(duì)象時(shí)執(zhí)行的類方法。是用于實(shí)現(xiàn)構(gòu)造類的實(shí)例所需操作的成員。析構(gòu)函數(shù)(destructor)是用于實(shí)現(xiàn)析構(gòu)類的實(shí)例所需操作的成員。析構(gòu)函數(shù)專門用于釋放被占用的系統(tǒng)資源。什么是構(gòu)造函數(shù)?

構(gòu)造函數(shù)是在用類創(chuàng)建對(duì)象時(shí)執(zhí)行的方法。構(gòu)造函數(shù)是一個(gè)特殊的方法。構(gòu)造函數(shù)具有如下性質(zhì):構(gòu)造函數(shù)的名稱與類的名稱相同。構(gòu)造函數(shù)總是public的。構(gòu)造函數(shù)盡管是一個(gè)函數(shù),但沒有任何類型,即它既不屬于返回值函數(shù)也不屬于void函數(shù)。1、構(gòu)造函數(shù)(constructor)一個(gè)類至少有一個(gè)構(gòu)造函數(shù),若程序代碼中沒有構(gòu)造函數(shù)則系統(tǒng)會(huì)自動(dòng)提供一個(gè)默認(rèn)的構(gòu)造函數(shù)。一個(gè)類可有多個(gè)構(gòu)造函數(shù),但所有構(gòu)造函數(shù)的名稱都必須相同,它們的參數(shù)各不相同,即構(gòu)造函數(shù)可以重載。1、構(gòu)造函數(shù)(constructor)構(gòu)造函數(shù)具有如下性質(zhì):構(gòu)造函數(shù)的主要作用是實(shí)現(xiàn)構(gòu)造類實(shí)例的所需操作,即完成對(duì)類的實(shí)例(即對(duì)象)的初始化工作。當(dāng)類對(duì)象創(chuàng)建時(shí),構(gòu)造函數(shù)會(huì)自動(dòng)地執(zhí)行;由于沒有返回類型,因此不能像其他函數(shù)那樣進(jìn)行調(diào)用。當(dāng)類對(duì)象聲明時(shí),調(diào)用哪一個(gè)構(gòu)造函數(shù)取決于傳遞給它的參數(shù)類型。構(gòu)造函數(shù)不能被繼承。1、構(gòu)造函數(shù)(constructor)調(diào)用構(gòu)造函數(shù)當(dāng)定義類對(duì)象時(shí),構(gòu)造函數(shù)會(huì)自動(dòng)執(zhí)行。1)調(diào)用默認(rèn)構(gòu)造函數(shù)不帶參數(shù)的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。無論何時(shí),只要使用new運(yùn)算符實(shí)例化對(duì)象,并且不為new提供任何參數(shù),就會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù)。1、構(gòu)造函數(shù)(constructor)1)調(diào)用默認(rèn)構(gòu)造函數(shù)假設(shè)一個(gè)類包含有默認(rèn)構(gòu)造函數(shù),調(diào)用默認(rèn)構(gòu)造函數(shù)的語法如下:類名對(duì)象名=new類名();如果沒有為對(duì)象提供構(gòu)造函數(shù),則默認(rèn)情況下C#將創(chuàng)建一個(gè)構(gòu)造函數(shù),該構(gòu)造函數(shù)實(shí)例化對(duì)象,并將所有成員變量設(shè)置為相應(yīng)的默認(rèn)值。1、構(gòu)造函數(shù)(constructor)2.調(diào)用構(gòu)造函數(shù)2)調(diào)用帶參數(shù)的構(gòu)造函數(shù)假設(shè)一個(gè)類中包含有帶參數(shù)的構(gòu)造函數(shù),調(diào)用這種帶參數(shù)的構(gòu)造函數(shù)的語法如下:類名對(duì)象名=new類名(參數(shù)表);1、構(gòu)造函數(shù)(constructor)【例】設(shè)計(jì)一個(gè)控制臺(tái)應(yīng)用程序,說明調(diào)用構(gòu)造函數(shù)的過程。完善point類,定義構(gòu)造函數(shù)publicclassTPoint1 //聲明類TPoint1{ intx,y;

//類的私有變量

publicTPoint1(){}

//默認(rèn)的構(gòu)造函數(shù)

publicTPoint1(intx1,inty1) //帶參數(shù)的構(gòu)造函數(shù)

{x=x1;y=y1;} publicvoiddispoint() {Console.WriteLine("({0},{1})",x,y);}}

staticvoidMain(string[]args){TPoint1p1=newTPoint1(); //調(diào)用默認(rèn)的構(gòu)造函數(shù)

Console.Write("第一個(gè)點(diǎn)=>");p1.dispoint();TPoint1p2=newTPoint1(8,3);//調(diào)用帶參數(shù)的構(gòu)造函數(shù)

Console.Write("第二個(gè)點(diǎn)=>");p2.dispoint();}

(1)什么是析構(gòu)函數(shù)

在對(duì)象不再需要時(shí),希望它所占的存儲(chǔ)空間能被收回。析構(gòu)函數(shù)專門用于釋放被占用的系統(tǒng)資源。析構(gòu)函數(shù)具有如下性質(zhì):析構(gòu)函數(shù)在類對(duì)象銷毀時(shí)自動(dòng)執(zhí)行。一個(gè)類只能有一個(gè)析構(gòu)函數(shù)析構(gòu)函數(shù)沒有參數(shù),即析構(gòu)函數(shù)不能重載。2、析構(gòu)函數(shù)(destructor)

(1)什么是析構(gòu)函數(shù)析構(gòu)函數(shù)的名稱是“~”加上類的名稱(中間沒有空格)。與構(gòu)造函數(shù)一樣,析構(gòu)函數(shù)也沒有返回類型。不能具有可訪問性修飾符,也不能被顯式地調(diào)用。垃圾回收期間會(huì)自動(dòng)調(diào)用所涉及實(shí)例的析構(gòu)函數(shù)。析構(gòu)函數(shù)不能被繼承。2、析構(gòu)函數(shù)(destructor)(2)調(diào)用析構(gòu)函數(shù)當(dāng)一個(gè)對(duì)象被系統(tǒng)銷毀時(shí)自動(dòng)調(diào)用類的析構(gòu)函數(shù)。析構(gòu)函數(shù)也不能被顯式地調(diào)用。垃圾回收期間會(huì)自動(dòng)調(diào)用所涉及實(shí)例的析構(gòu)函數(shù)。2、析構(gòu)函數(shù)【例】設(shè)計(jì)一個(gè)控制臺(tái)應(yīng)用程序,說明調(diào)用析構(gòu)函數(shù)的過程。publicclassTPoint2//聲明類TPoint2{ intx,y; publicTPoint2(intx1,inty1) //帶參數(shù)的構(gòu)造函數(shù)

{x=x1;y=y1;}

~TPoint2() {Console.WriteLine("點(diǎn)=>({0},{1})",x,y);}}程序輸出什么?staticvoidMain(string[]args){ TPoint2p1=newTPoint2(2,6); TPoint2p2=newTPoint2(8,3);}【例】定義一個(gè)表示時(shí)間的類,可以設(shè)置和顯示時(shí)間。6.4方法

方法是一種用于實(shí)現(xiàn)可以由對(duì)象或類執(zhí)行的計(jì)算或操作的成員。方法包含一系列的代碼塊。從本質(zhì)上來講,方法就是和類相關(guān)聯(lián)的動(dòng)作,是類的外部界面。用戶可以通過外部界面來操作類的私有字段。1、什么是方法定義方法的基本格式如下:

修飾符返回類型方法名([參數(shù)列表]){ //方法體:方法的具體實(shí)現(xiàn);}2、方法的定義如省略修飾符,默認(rèn)為private。如不需要返回值,則返回類型必須為void。聲明方法時(shí)的參數(shù),稱為形式參數(shù),簡稱“形參”調(diào)用方法時(shí)的參數(shù),稱為實(shí)際參數(shù),簡稱“實(shí)參”定義方法的基本格式如下:

修飾符返回類型方法名([參數(shù)列表])

{ //方法體:方法的具體實(shí)現(xiàn);}2、方法的定義在聲明方法的類中,方法的“方法頭”(也稱為方法簽名)必須是惟一的,否則會(huì)出現(xiàn)錯(cuò)誤。方法的“方法頭”由它的名稱、參數(shù)的數(shù)目、每個(gè)參數(shù)的修飾符和類型組成。返回類型不是方法簽名的組成部分。

方法可以向調(diào)用方返回某一個(gè)特定的值。如果返回類型不是void,則該方法可以用return關(guān)鍵字來返回值,return還可以用來停止方法的執(zhí)行。3、方法的返回值例以下類MyClass3中的addnum方法用return關(guān)鍵字來返回值:

publicclassMyClass3{ intnum=0; publicintaddnum(intnum1,intnum2) {num=num1+num2;

returnnum; }}3、方法的返回值方法可以有參數(shù),也可以沒有參數(shù),但是不論是否有參數(shù),小括號(hào)都是必需的。如果參數(shù)序列中的參數(shù)有多個(gè),則以逗號(hào)分開。return語句結(jié)束某個(gè)方法的執(zhí)行,程序遇到return語句后,會(huì)將執(zhí)行流程交還給調(diào)用此方法的程序代碼段。此外,還可以用return語句返回一個(gè)值。如果聲明一個(gè)非void類型的方法,則方法中必須至少有一個(gè)return語句。3、方法的返回值定義方法時(shí),需要注意以下幾點(diǎn):【例】定義一個(gè)矩形類,實(shí)現(xiàn)計(jì)算矩形的面積、周長,修改、顯示矩形的邊長。3、方法的返回值方法中的參數(shù)是保證不同的方法間互動(dòng)的重要橋梁,方便用戶對(duì)數(shù)據(jù)的操作。C#中方法的參數(shù)有4種類型。1.值參數(shù)2.引用型參數(shù)3.輸出參數(shù)4、方法的參數(shù)在調(diào)用一個(gè)有參數(shù)的方法時(shí),首先進(jìn)行“形實(shí)結(jié)合”,實(shí)現(xiàn)調(diào)用程序和被調(diào)用的方法之間的數(shù)據(jù)傳遞。(1)

值參數(shù)不含任何修飾符,當(dāng)利用值向方法傳遞參數(shù)時(shí),編譯程序給實(shí)參的值做一份拷貝,并且將此拷貝傳遞給該方法,被調(diào)用的方法不會(huì)修改內(nèi)存中實(shí)參的值,所以使用值參數(shù)時(shí)可以保證實(shí)際值的安全性。4、方法的參數(shù)“傳值”:默認(rèn)方式(1)

值參數(shù)在調(diào)用方法時(shí),如果形參的類型是值參數(shù)的話,調(diào)用的實(shí)參的表達(dá)式必須保證是正確的值表達(dá)式。例前面MyClass3類中addnum方法中的參數(shù)就是值參數(shù)。4、方法的參數(shù)a=addnum(intm,5)(2)

引用型參數(shù)

以ref修飾符聲明的參數(shù)屬引用型參數(shù)。引用型參數(shù)本身并不創(chuàng)建新的存儲(chǔ)空間,而是將實(shí)參的存儲(chǔ)地址傳遞給形參,即形參和實(shí)參共用同一內(nèi)存塊。所以對(duì)形參的修改會(huì)影響原來實(shí)參的值。在調(diào)用方法前,引用型實(shí)參必須被初始化,同時(shí)在調(diào)用方法時(shí),對(duì)應(yīng)引用型參數(shù)的實(shí)參也必須使用ref修飾。4、方法的參數(shù)“傳址”publicclassMyClass4{ intnum=0; publicvoidaddnum(intnum1,refintnum2) {num2=num+num1; }}classProgram{ staticvoidMain(string[]args) {intx=10; MyClass4s=newMyClass4(); s.addnum(5,refx); Console.WriteLine(x);

//輸出:? }}4、方法的參數(shù)

例:(3)輸出參數(shù)以out修飾符聲明的參數(shù)屬輸出參數(shù)。與引用型參數(shù)類似,輸出型參數(shù)也不開辟新的內(nèi)存區(qū)域。與引用型參數(shù)的差別:調(diào)用方法前無需對(duì)變量進(jìn)行初始化。輸出型參數(shù)用于傳遞方法返回的數(shù)據(jù),out修飾符后應(yīng)跟隨與形參的類型相同的類型,用來聲明在方法返回后傳遞的變量經(jīng)過了初始化。4、方法的參數(shù)out參數(shù)(輸出型參數(shù))publicclassMyClass5{intnum=10;publicvoidaddnum(intnum1,outintnum2){num2=num+num1;}}classProgram{staticvoidMain(string[]args){ intx=20;MyClass5s=newMyClass5();s.addnum(5,outx);Console.WriteLine(x);

//輸出:?}}4、方法的參數(shù)

例:雖然ref和out都提供了修改參數(shù)值的方法,但兩者之間還是有一些小的區(qū)別。主要的區(qū)別有:(1)ref在作為參數(shù)調(diào)用函數(shù)之前,變量一定要賦值,否則會(huì)得到一個(gè)常規(guī)編譯錯(cuò)誤:使用了未賦值的變量。(2)在被調(diào)用函數(shù)內(nèi),以ref引入的參數(shù)在返回前不必為它賦值。(3)out在作為參數(shù)調(diào)用函數(shù)之前,變量可以不被賦值。(4)在被調(diào)用函數(shù)內(nèi),以out引入的參數(shù)在返回前一定要至少賦值一次。4、方法的參數(shù)ref參數(shù)與out參數(shù)的區(qū)別從本質(zhì)上講,ref更適合理解為給被調(diào)用函數(shù)傳遞了一個(gè)與原參考相同內(nèi)存地址的變量。而out則可以理解為在調(diào)用函數(shù)前,先給變量找個(gè)地方(內(nèi)存區(qū)域),讓被調(diào)用函數(shù)給指定的內(nèi)存區(qū)域放置一個(gè)值。4、方法的參數(shù)ref參數(shù)與out參數(shù)的區(qū)別方法重載是指具有相同的方法名,但參數(shù)類型或參數(shù)個(gè)數(shù)不完全相同的多個(gè)方法可以同時(shí)出現(xiàn)在一個(gè)類中。調(diào)用時(shí)可用同一方法名,但是使用不同的數(shù)據(jù)類型參數(shù)或者次序不一致的參數(shù)。只要一個(gè)類中有兩個(gè)以上的同名方法,且使用的參數(shù)類型或者個(gè)數(shù)不同,編譯器就可以判斷在哪種情況下調(diào)用哪種方法了。5、方法的重載為此,C#中引入了成員簽名的概念。成員簽名包含成員的名稱和參數(shù)列表,每個(gè)成員簽名在類型中必須是唯一的,只要成員的參數(shù)列表不同,成員的名稱可以相同。如果同一個(gè)類有兩個(gè)或多個(gè)這樣的成員(方法、屬性、構(gòu)造函數(shù)等),它們具有相同的名稱和不同的參數(shù)列表,則稱該同類成員進(jìn)行了重載,但它們的成員簽名是不同的。5、方法的重載classProgram{publicstaticintAdd(inti,intj)//重載方法1{returni+j;}publicstaticstringAdd(strings1,strings2)

//重載方法2{returns1+s2;}publicstaticdouble

Add(doublex,doubley)//重載方法3{returnx+y;}staticvoidMain(){Console.WriteLine(Add(1,2));Console.WriteLine(Add("1","2"));Console.WriteLine(Add(5.4,105.33));}}5、方法的重載6、方法的嵌套與遞歸調(diào)用在一個(gè)方法中調(diào)用另外一個(gè)方法,稱為方法的嵌套調(diào)用;方法直接或間接地調(diào)用其本身,則稱為方法的遞歸調(diào)用。(1)方法的嵌套在C#中,不可以在定義的一個(gè)方法的代碼中定義另外一個(gè)方法,但在一個(gè)方法中調(diào)用另外一個(gè)方法是允許的,這種調(diào)用方式稱為方法的嵌套調(diào)用。6

、方法的嵌套與遞歸調(diào)用(2)方法的遞歸調(diào)用方法的遞歸調(diào)用是指一個(gè)方法直接或間接調(diào)用自己本身的情況。很多的數(shù)學(xué)模型和算法設(shè)計(jì)方法本來就是遞歸的,所以用遞歸方法描述它們比用非遞歸方法簡潔易讀,可理解性好,算法的正確性證明也比較容易。一般來說,在方法的遞歸調(diào)用中,一個(gè)方法執(zhí)行的某一步都要用到它自身的前面一步或前若干步的結(jié)果。1當(dāng)n=0時(shí)n!=

n*(n-1)!當(dāng)n≥1時(shí)6

、方法的嵌套與遞歸調(diào)用(2)

方法的遞歸調(diào)用1當(dāng)n=0時(shí)n!=

n*(n-1)!當(dāng)n≥1時(shí)publiclongFactorial(intn){if(n==0||n==1)return1;elsereturnn*Factorial(n-1);}

類的定義綜合案例classcar

{

privateint_百公里耗油=10;

privateint_油箱容積=60;

privateint_油表;

privateint_公里數(shù);

定義一個(gè)汽車類,演示類的定義相關(guān)知識(shí)點(diǎn)。構(gòu)造函數(shù)重載

publiccar()

{

_油表=_油箱容積;

_公里數(shù)=0;

}

publiccar(int

當(dāng)前油表)

{

_油表=當(dāng)前油表;

_公里數(shù)=0;

}

publiccar(int

當(dāng)前油表,int

當(dāng)前里程)

{

_油表=當(dāng)前油表;

_公里數(shù)=當(dāng)前里程;

}

方法的嵌套調(diào)用

private

int

計(jì)算耗油(int

行駛公里數(shù))

{

return行駛公里數(shù)*_百公里耗油/100;

}

publicvoid行駛(int

行駛公里數(shù))

{

Console.WriteLine(“行駛{0}公里開始”,行駛公里數(shù));

if(_油表>計(jì)算耗油(行駛公里數(shù)))

{

_公里數(shù)+=行駛公里數(shù);

溫馨提示

  • 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)論