




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2021-10-251第四章第四章 面向?qū)ο蟪绦蛟O(shè)計(jì)入門面向?qū)ο蟪绦蛟O(shè)計(jì)入門1. 總體要求總體要求l理解面向?qū)ο蟮幕靖拍?,正確區(qū)分類和對(duì)象,對(duì)象的聲明理解面向?qū)ο蟮幕靖拍睿_區(qū)分類和對(duì)象,對(duì)象的聲明和對(duì)象的創(chuàng)建。和對(duì)象的創(chuàng)建。l掌握類的定義與使用方法,正確定義類的數(shù)據(jù)成員、屬性和掌握類的定義與使用方法,正確定義類的數(shù)據(jù)成員、屬性和方法。方法。l理解類的可訪問性、正確使用訪問修飾符控制對(duì)類成員的訪理解類的可訪問性、正確使用訪問修飾符控制對(duì)類成員的訪問。問。l掌握類的方法的定義、調(diào)用與重載,理解方法的參數(shù)傳遞的掌握類的方法的定義、調(diào)用與重載,理解方法的參數(shù)傳遞的工作機(jī)制。工作機(jī)制。l理解值類
2、型和引用類型的區(qū)別。理解值類型和引用類型的區(qū)別。l理解構(gòu)造函數(shù)與析構(gòu)函數(shù)的作用,掌握其使用方法。理解構(gòu)造函數(shù)與析構(gòu)函數(shù)的作用,掌握其使用方法。l方法的重載和參數(shù)傳遞方法的重載和參數(shù)傳遞2. 相關(guān)知識(shí)點(diǎn)相關(guān)知識(shí)點(diǎn)l熟悉熟悉c#中數(shù)據(jù)類型、表達(dá)式、運(yùn)算符、常量與變量等基礎(chǔ)中數(shù)據(jù)類型、表達(dá)式、運(yùn)算符、常量與變量等基礎(chǔ)知識(shí)。知識(shí)。l熟悉熟悉c#中數(shù)據(jù)類型轉(zhuǎn)換。中數(shù)據(jù)類型轉(zhuǎn)換。3. 學(xué)習(xí)重點(diǎn)學(xué)習(xí)重點(diǎn)lc#中類的定義、類的數(shù)據(jù)成員、屬性和方法中類的定義、類的數(shù)據(jù)成員、屬性和方法l類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)l方法的重載和參數(shù)傳遞方法的重載和參數(shù)傳遞第四章第四章 面向?qū)ο蟪绦蛟O(shè)計(jì)入門面向?qū)ο蟪绦蛟O(shè)計(jì)入門 4.
3、學(xué)習(xí)難點(diǎn)學(xué)習(xí)難點(diǎn)l類和對(duì)象的關(guān)系類和對(duì)象的關(guān)系l方法的重載和參數(shù)傳遞方法的重載和參數(shù)傳遞l值類型和引用類型及對(duì)象的生命周期值類型和引用類型及對(duì)象的生命周期第四章第四章 面向?qū)ο蟪绦蛟O(shè)計(jì)入門面向?qū)ο蟪绦蛟O(shè)計(jì)入門 第四章第四章 面向?qū)ο蟪绦蛟O(shè)計(jì)入門面向?qū)ο蟪绦蛟O(shè)計(jì)入門面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮幕靖拍?類的定義類的定義類的方法類的方法構(gòu)造函數(shù)構(gòu)造函數(shù)2021-10-256l4.1.1 對(duì)象對(duì)象l4.1.2 事件與方法事件與方法l4.1.3 類與對(duì)象類與對(duì)象l4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài) 2021-10-257對(duì)象對(duì)象l客觀世界中任何一個(gè)事物都可以看成一個(gè)對(duì)象客觀世界中
4、任何一個(gè)事物都可以看成一個(gè)對(duì)象(object),對(duì)象可以是自然物體(如汽車、房屋、狗),也可以是社對(duì)象可以是自然物體(如汽車、房屋、狗),也可以是社會(huì)生活中一種邏輯結(jié)構(gòu)(如班級(jí)、部門、組織),甚至一會(huì)生活中一種邏輯結(jié)構(gòu)(如班級(jí)、部門、組織),甚至一篇文章、一個(gè)圖形、一項(xiàng)計(jì)劃等都可以視作對(duì)象。對(duì)象是篇文章、一個(gè)圖形、一項(xiàng)計(jì)劃等都可以視作對(duì)象。對(duì)象是構(gòu)成系統(tǒng)的基本單位,在實(shí)際社會(huì)生活中,人們都是在不構(gòu)成系統(tǒng)的基本單位,在實(shí)際社會(huì)生活中,人們都是在不同的對(duì)象中活動(dòng)的。同的對(duì)象中活動(dòng)的。 l任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,即屬性任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,即屬性(attribute)和行為和行
5、為(behavior),一個(gè)對(duì)象往往由一組屬性和一組行為,一個(gè)對(duì)象往往由一組屬性和一組行為構(gòu)成,一輛汽車是一個(gè)對(duì)象,它的屬性是生產(chǎn)廠家、品牌、構(gòu)成,一輛汽車是一個(gè)對(duì)象,它的屬性是生產(chǎn)廠家、品牌、型號(hào)、顏色、價(jià)格等,它是行為是它的功能,如發(fā)動(dòng)、停型號(hào)、顏色、價(jià)格等,它是行為是它的功能,如發(fā)動(dòng)、停止、加速等,一般來說,凡是具備屬性和行為這兩個(gè)要素止、加速等,一般來說,凡是具備屬性和行為這兩個(gè)要素的,都可以作為對(duì)象,的,都可以作為對(duì)象,對(duì)象對(duì)象l對(duì)象是問題域中某些事物的一個(gè)抽象,反映事物對(duì)象是問題域中某些事物的一個(gè)抽象,反映事物在系統(tǒng)中需要保存的必要信息和發(fā)揮的作用,是在系統(tǒng)中需要保存的必要信息和發(fā)
6、揮的作用,是包含一些特殊屬性(數(shù)據(jù))和服務(wù)(行為方法)包含一些特殊屬性(數(shù)據(jù))和服務(wù)(行為方法)的封裝實(shí)體。具體來說,他應(yīng)有唯一的名稱,有的封裝實(shí)體。具體來說,他應(yīng)有唯一的名稱,有一系列狀態(tài)(表示為數(shù)據(jù)),有表示對(duì)象行為的一系列狀態(tài)(表示為數(shù)據(jù)),有表示對(duì)象行為的一系列行為(方法),簡言之:一系列行為(方法),簡言之:l對(duì)象對(duì)象 = 屬性屬性 + 行為(方法、操作)行為(方法、操作)4.1.2 事件與方法事件與方法l事件(事件(event)又稱為消息()又稱為消息(message),表示),表示向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求。方法(向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求。方法(method)表示對(duì))表示對(duì)象能完成的服務(wù)或
7、執(zhí)行的操作功能。象能完成的服務(wù)或執(zhí)行的操作功能。l在一個(gè)系統(tǒng)中的多個(gè)對(duì)象之間通過一定的渠道相在一個(gè)系統(tǒng)中的多個(gè)對(duì)象之間通過一定的渠道相互聯(lián)系,要使某一個(gè)對(duì)象實(shí)現(xiàn)某一種行為或操作互聯(lián)系,要使某一個(gè)對(duì)象實(shí)現(xiàn)某一種行為或操作,應(yīng)當(dāng)向他傳送相應(yīng)的消息。例如想讓汽車行駛,應(yīng)當(dāng)向他傳送相應(yīng)的消息。例如想讓汽車行駛,必須由人去踩油門,向汽車發(fā)出相應(yīng)的信號(hào)。,必須由人去踩油門,向汽車發(fā)出相應(yīng)的信號(hào)。對(duì)象之間就是這樣通過發(fā)送和接收消息互相聯(lián)系對(duì)象之間就是這樣通過發(fā)送和接收消息互相聯(lián)系的。的。l在面向?qū)ο蟮母拍钪?,一個(gè)對(duì)象可以有多個(gè)方法,提供多在面向?qū)ο蟮母拍钪?,一個(gè)對(duì)象可以有多個(gè)方法,提供多種服務(wù),完成多種操作
8、功能。但這些方法只有在另外一個(gè)種服務(wù),完成多種操作功能。但這些方法只有在另外一個(gè)對(duì)象向他發(fā)出請(qǐng)求之后(發(fā)生事件)才會(huì)被執(zhí)行。對(duì)象向他發(fā)出請(qǐng)求之后(發(fā)生事件)才會(huì)被執(zhí)行。 4.1.3 類與對(duì)象類與對(duì)象l普通邏輯意義上的類是現(xiàn)實(shí)世界中各種實(shí)體的抽普通邏輯意義上的類是現(xiàn)實(shí)世界中各種實(shí)體的抽象概念,而對(duì)象是現(xiàn)實(shí)生活中的一個(gè)個(gè)實(shí)體,例象概念,而對(duì)象是現(xiàn)實(shí)生活中的一個(gè)個(gè)實(shí)體,例如,在現(xiàn)實(shí)世界中大量具體一輛輛汽車、摩托車如,在現(xiàn)實(shí)世界中大量具體一輛輛汽車、摩托車、自行車等實(shí)體是對(duì)象,而交通工具則是這些對(duì)、自行車等實(shí)體是對(duì)象,而交通工具則是這些對(duì)象的抽象,交通工具就是一個(gè)類。象的抽象,交通工具就是一個(gè)類。l在
9、面向?qū)ο蟮母拍钪?,類(在面向?qū)ο蟮母拍钪?,類(class)表示具有相同)表示具有相同屬性和行為的一組對(duì)象的集合,為該類的所有對(duì)屬性和行為的一組對(duì)象的集合,為該類的所有對(duì)象提供統(tǒng)一的抽象描述。象提供統(tǒng)一的抽象描述。 l類是對(duì)相似對(duì)象的抽象,而對(duì)象是該類的一個(gè)特類是對(duì)相似對(duì)象的抽象,而對(duì)象是該類的一個(gè)特例,類與對(duì)象的關(guān)系是抽象與具體的關(guān)系。例,類與對(duì)象的關(guān)系是抽象與具體的關(guān)系。 4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l面向?qū)ο蟮淖罨镜奶卣魇浅橄笮浴⒎庋b性、繼承性和多面向?qū)ο蟮淖罨镜奶卣魇浅橄笮浴⒎庋b性、繼承性和多態(tài)性。態(tài)性。l1抽象抽象l抽象(抽象(abstraction)是
10、處理事物復(fù)雜性的方法,只關(guān)注與)是處理事物復(fù)雜性的方法,只關(guān)注與當(dāng)前目標(biāo)有關(guān)的方面,而忽略與當(dāng)前目標(biāo)無關(guān)的那些方面當(dāng)前目標(biāo)有關(guān)的方面,而忽略與當(dāng)前目標(biāo)無關(guān)的那些方面,例如在學(xué)生成績管理中,張三、李四、王五作為學(xué)生,例如在學(xué)生成績管理中,張三、李四、王五作為學(xué)生,我們只關(guān)心他們和成績管理有關(guān)的屬性和行為,如學(xué)號(hào)、我們只關(guān)心他們和成績管理有關(guān)的屬性和行為,如學(xué)號(hào)、姓名、成績、專業(yè)等特性。抽象的過程是將有關(guān)事物的共姓名、成績、專業(yè)等特性。抽象的過程是將有關(guān)事物的共性歸納、集中的過程,例如凡是有輪子、能滾動(dòng)并前進(jìn)的性歸納、集中的過程,例如凡是有輪子、能滾動(dòng)并前進(jìn)的陸地交通工具統(tǒng)稱為陸地交通工具統(tǒng)稱為“
11、車子車子”,把其中用汽油發(fā)動(dòng)機(jī)驅(qū)動(dòng),把其中用汽油發(fā)動(dòng)機(jī)驅(qū)動(dòng)的抽象為的抽象為“汽車汽車”,把用馬拉的抽象為,把用馬拉的抽象為“馬車馬車”。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l抽象能表示同一類事物的本質(zhì),如果你會(huì)使用自己家里的抽象能表示同一類事物的本質(zhì),如果你會(huì)使用自己家里的電視機(jī),在別人家里看到即便是不同的牌子的電視機(jī),你電視機(jī),在別人家里看到即便是不同的牌子的電視機(jī),你也能對(duì)它進(jìn)行操作。因這它具有所有電視機(jī)所共有的特征也能對(duì)它進(jìn)行操作。因這它具有所有電視機(jī)所共有的特征,而,而c#中的數(shù)據(jù)類型就是對(duì)一系列具體的數(shù)的抽象,例如中的數(shù)據(jù)類型就是對(duì)一系列具體的數(shù)的抽象,例如:in
12、t是對(duì)所有整數(shù)的抽象,是對(duì)所有整數(shù)的抽象,double是對(duì)所有雙精度浮點(diǎn)型是對(duì)所有雙精度浮點(diǎn)型數(shù)的抽象。數(shù)的抽象。l2封裝和信息隱藏封裝和信息隱藏l封裝(封裝(encapsulation)有兩個(gè)方面的含義:一是將)有兩個(gè)方面的含義:一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形成一個(gè)有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形成一個(gè)基本單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干擾。二是基本單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干擾。二是將對(duì)象中某些部份對(duì)外隱藏,即隱藏其內(nèi)部細(xì)節(jié),只將對(duì)象中某些部份對(duì)外隱藏,即隱藏其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界的消息。留下少量接口,以便與外界聯(lián)系,接收外界的
13、消息。這種對(duì)外界隱藏的做法稱為信息隱藏(這種對(duì)外界隱藏的做法稱為信息隱藏(information hiding)。信息隱藏還有利于數(shù)據(jù)安全,防止無關(guān)的)。信息隱藏還有利于數(shù)據(jù)安全,防止無關(guān)的人了解和修改數(shù)據(jù)。人了解和修改數(shù)據(jù)。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l封裝把對(duì)象的全部屬性和全部行為結(jié)合在一起形成一個(gè)不封裝把對(duì)象的全部屬性和全部行為結(jié)合在一起形成一個(gè)不可分割的獨(dú)立單位。而通過信息隱蔽技術(shù),用戶只能見到可分割的獨(dú)立單位。而通過信息隱蔽技術(shù),用戶只能見到對(duì)象封裝界面上的信息,對(duì)象內(nèi)部對(duì)用戶是隱蔽的。對(duì)象封裝界面上的信息,對(duì)象內(nèi)部對(duì)用戶是隱蔽的。l例如,一臺(tái)電視機(jī)就是一
14、個(gè)封裝體。從設(shè)計(jì)者的角度來講例如,一臺(tái)電視機(jī)就是一個(gè)封裝體。從設(shè)計(jì)者的角度來講,不僅需要考慮內(nèi)部的各種元器件,還要考慮主機(jī)板、顯,不僅需要考慮內(nèi)部的各種元器件,還要考慮主機(jī)板、顯像管等元器件的連接與組裝;從使用者的角度來講,只關(guān)像管等元器件的連接與組裝;從使用者的角度來講,只關(guān)心其型號(hào)、顏色、重量等屬性,只關(guān)心電源開關(guān)按鈕、音心其型號(hào)、顏色、重量等屬性,只關(guān)心電源開關(guān)按鈕、音量開關(guān)、調(diào)頻按鈕、視頻輸入輸出接口等用起來是否方便量開關(guān)、調(diào)頻按鈕、視頻輸入輸出接口等用起來是否方便,根本不用關(guān)心其內(nèi)部構(gòu)造。,根本不用關(guān)心其內(nèi)部構(gòu)造。l因此,封裝的目的在于將對(duì)象的使用者與設(shè)計(jì)者分開,使因此,封裝的目的在
15、于將對(duì)象的使用者與設(shè)計(jì)者分開,使用者不必了解對(duì)象行為的具體實(shí)現(xiàn),只需要用設(shè)計(jì)者提供用者不必了解對(duì)象行為的具體實(shí)現(xiàn),只需要用設(shè)計(jì)者提供的消息接口來訪問該對(duì)象。的消息接口來訪問該對(duì)象。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l3繼承繼承l(wèi)汽車制造廠要生產(chǎn)新型號(hào)的汽車,如果全部從頭開始設(shè)計(jì)汽車制造廠要生產(chǎn)新型號(hào)的汽車,如果全部從頭開始設(shè)計(jì),將耗費(fèi)大力的人力、物力和財(cái)力。但如果選擇已有的某,將耗費(fèi)大力的人力、物力和財(cái)力。但如果選擇已有的某一型號(hào)的汽車為基礎(chǔ),再增加一些新的功能,就能快速研一型號(hào)的汽車為基礎(chǔ),再增加一些新的功能,就能
16、快速研發(fā)出新型號(hào)的汽車。這是提高生產(chǎn)效率的常用方法。發(fā)出新型號(hào)的汽車。這是提高生產(chǎn)效率的常用方法。l如果在軟件開發(fā)中已建立了一個(gè)名為如果在軟件開發(fā)中已建立了一個(gè)名為a的類,又想建立一的類,又想建立一個(gè)名為個(gè)名為b的類,而后者與前者內(nèi)容基本相同,只是在前者的類,而后者與前者內(nèi)容基本相同,只是在前者基礎(chǔ)上增加一些新的屬性和行為,顯然不必再從頭設(shè)計(jì)一基礎(chǔ)上增加一些新的屬性和行為,顯然不必再從頭設(shè)計(jì)一個(gè)新類,只需在個(gè)新類,只需在a類的基礎(chǔ)上增加一些新的內(nèi)容即可,而類的基礎(chǔ)上增加一些新的內(nèi)容即可,而b類的對(duì)象擁有類的對(duì)象擁有a類的全部屬性與方法,稱作類的全部屬性與方法,稱作b類對(duì)類對(duì)a類的繼類的繼承,在
17、承,在b類中不必重新定義已在類中不必重新定義已在a類中定義過的屬性和方法類中定義過的屬性和方法,這種特性在面向?qū)ο笾蟹Q作對(duì)象的繼承性。繼承在,這種特性在面向?qū)ο笾蟹Q作對(duì)象的繼承性。繼承在c#中中稱為派生,其中,稱為派生,其中,a類稱為基類或父類,類稱為基類或父類,b類稱為派生類或類稱為派生類或子類。子類。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l繼承機(jī)制的優(yōu)勢(shì)在于降低了軟件開發(fā)的復(fù)雜性和繼承機(jī)制的優(yōu)勢(shì)在于降低了軟件開發(fā)的復(fù)雜性和費(fèi)用,使軟件系統(tǒng)易于擴(kuò)充,大大縮短了軟件開費(fèi)用,使軟件系統(tǒng)易于擴(kuò)充,大大縮短了軟件開發(fā)周期,對(duì)于大型軟件的開發(fā)具有重要的意義。發(fā)周期,對(duì)于大型軟件的開發(fā)
18、具有重要的意義。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l4多態(tài)多態(tài)l多態(tài)性(多態(tài)性(polymorphism)是指在基類中定義的屬性或方)是指在基類中定義的屬性或方法被派生類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不法被派生類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。其對(duì)象對(duì)同一消息會(huì)做出不同的響應(yīng),如張三同的行為。其對(duì)象對(duì)同一消息會(huì)做出不同的響應(yīng),如張三、李四和王五是分別是屬于三個(gè)班的三個(gè)學(xué)生,在聽到上、李四和王五是分別是屬于三個(gè)班的三個(gè)學(xué)生,在聽到上課鈴聲后,他們會(huì)分別走進(jìn)課鈴聲后,他們會(huì)分別走進(jìn)3個(gè)不同的教室,同樣,個(gè)不同的教室,同樣,“啟動(dòng)啟動(dòng)”是所有交通工具都
19、具有的操作,但不同的具體交通工具是所有交通工具都具有的操作,但不同的具體交通工具其其“啟動(dòng)啟動(dòng)”操作的具體實(shí)現(xiàn)是不同的,如汽車的啟動(dòng)是操作的具體實(shí)現(xiàn)是不同的,如汽車的啟動(dòng)是“發(fā)動(dòng)機(jī)點(diǎn)火,啟動(dòng)引擎發(fā)動(dòng)機(jī)點(diǎn)火,啟動(dòng)引擎”,啟動(dòng)輪船時(shí)要,啟動(dòng)輪船時(shí)要“起錨起錨”,氣球,氣球飛艇啟動(dòng)是飛艇啟動(dòng)是“充氣,解纜充氣,解纜”,為了實(shí)現(xiàn)多態(tài)性,需要在派,為了實(shí)現(xiàn)多態(tài)性,需要在派生類中更改從基類中自動(dòng)繼承來的數(shù)據(jù)類型或方法。這種生類中更改從基類中自動(dòng)繼承來的數(shù)據(jù)類型或方法。這種為了替換基類的部分內(nèi)容而在派生類中重新進(jìn)行定義的操為了替換基類的部分內(nèi)容而在派生類中重新進(jìn)行定義的操作,在面向?qū)ο蟮母拍钪蟹Q為覆蓋。這樣
20、一來,不同類的作,在面向?qū)ο蟮母拍钪蟹Q為覆蓋。這樣一來,不同類的對(duì)象可以響應(yīng)同名的消息(方法)來完成特定的功能,但對(duì)象可以響應(yīng)同名的消息(方法)來完成特定的功能,但其具體的實(shí)現(xiàn)方法卻可以不同。其具體的實(shí)現(xiàn)方法卻可以不同。4.2 類的定義類的定義l4.2.1 類的聲明和實(shí)例化類的聲明和實(shí)例化 l4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l4.2.3 類的可訪問性類的可訪問性l4.2.4 值類型與引用類型值類型與引用類型4.2.1 類的聲明和實(shí)例化類的聲明和實(shí)例化 l1類的聲明類的聲明l類的聲明一般形式如下:類的聲明一般形式如下: 訪問修飾符訪問修飾符 class 類名類名 :基類基類 類的
21、成員類的成員; l其中,訪問修飾符用來限制類的作用范圍或訪問級(jí)別,可其中,訪問修飾符用來限制類的作用范圍或訪問級(jí)別,可省略;類名是一個(gè)合法的省略;類名是一個(gè)合法的c#標(biāo)識(shí)符,推薦使用標(biāo)識(shí)符,推薦使用pascal命名命名規(guī)范,規(guī)范,pascal命名規(guī)范要求名稱的每個(gè)單詞的首字母要大命名規(guī)范要求名稱的每個(gè)單詞的首字母要大寫;基類表明所定義的類是一個(gè)派生類,可省略;類的成寫;基類表明所定義的類是一個(gè)派生類,可省略;類的成員放在花括號(hào)中,構(gòu)成類的主體,用來定義類的屬性和行員放在花括號(hào)中,構(gòu)成類的主體,用來定義類的屬性和行為。類的成員包括常量、字段、屬性、索引器、方法、事為。類的成員包括常量、字段、屬性
22、、索引器、方法、事件、構(gòu)造函數(shù)等。件、構(gòu)造函數(shù)等。4.2.1 類的聲明和實(shí)例化類的聲明和實(shí)例化l2類的實(shí)例類的實(shí)例l定義類之后,可以用定義的類聲明對(duì)象,然后再通過這個(gè)定義類之后,可以用定義的類聲明對(duì)象,然后再通過這個(gè)對(duì)象來訪問其數(shù)據(jù)或調(diào)用其方法。對(duì)象來訪問其數(shù)據(jù)或調(diào)用其方法。l(1) 對(duì)象的聲明與創(chuàng)建。對(duì)象的聲明與創(chuàng)建。l聲明對(duì)象的格式與聲明基本數(shù)據(jù)類型的格式相同,其語法聲明對(duì)象的格式與聲明基本數(shù)據(jù)類型的格式相同,其語法格式為:格式為:l類名類名 對(duì)象名對(duì)象名l例如:例如:lstudent stu1; /聲明一個(gè)聲明一個(gè)student對(duì)象對(duì)象stu14.2.1 類的聲明和實(shí)例化類的聲明和實(shí)例化
23、l但是,對(duì)象聲明后需要用但是,對(duì)象聲明后需要用“new”關(guān)鍵字將對(duì)象實(shí)例化,關(guān)鍵字將對(duì)象實(shí)例化,這樣才能為對(duì)象在內(nèi)存中分配保存數(shù)據(jù)空間,實(shí)例化的語這樣才能為對(duì)象在內(nèi)存中分配保存數(shù)據(jù)空間,實(shí)例化的語法格式為:法格式為: 對(duì)象名對(duì)象名=new 類名類名(); 例如:例如: stu1 = new student(); /為為stu1分配內(nèi)存空間分配內(nèi)存空間l也可以在聲明對(duì)象同時(shí)實(shí)例化對(duì)象。語法格式為:也可以在聲明對(duì)象同時(shí)實(shí)例化對(duì)象。語法格式為: 類名類名 對(duì)象名對(duì)象名=new 類名類名(); 例如:例如: student stu2 = new student(); /聲明同時(shí)創(chuàng)建對(duì)象聲明同時(shí)創(chuàng)建對(duì)象
24、4.2.1 類的聲明和實(shí)例化類的聲明和實(shí)例化l(2) 類成員的訪問。類成員的訪問。l類成員有兩種訪問方式:一種是在類的內(nèi)部訪問,另一種類成員有兩種訪問方式:一種是在類的內(nèi)部訪問,另一種是在類的外部訪問。是在類的外部訪問。l在類的內(nèi)部訪問類的成員,表示一個(gè)類成員要使用當(dāng)前類在類的內(nèi)部訪問類的成員,表示一個(gè)類成員要使用當(dāng)前類中的其他成員,可以直接使用成員名稱,有時(shí)為了避免引中的其他成員,可以直接使用成員名稱,有時(shí)為了避免引起混淆,也可采用如下形式:起混淆,也可采用如下形式:lthis.類成員類成員l其中,其中,this表示當(dāng)前對(duì)象,是表示當(dāng)前對(duì)象,是c#的關(guān)鍵字。的關(guān)鍵字。4.2.1 類的聲明和實(shí)
25、例化類的聲明和實(shí)例化l【實(shí)例【實(shí)例4-1】定義】定義student類并實(shí)例化類的對(duì)象。類并實(shí)例化類的對(duì)象。4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l類的成員包括類的常量、字段、屬性、索引器、方法、事類的成員包括類的常量、字段、屬性、索引器、方法、事件、構(gòu)造函數(shù)等,其中,常量、字段和屬性都是與類的數(shù)件、構(gòu)造函數(shù)等,其中,常量、字段和屬性都是與類的數(shù)據(jù)有關(guān)的成員。據(jù)有關(guān)的成員。l1常量常量l常量的值是固定不變的。類的常量成員是一種符號(hào)常量,常量的值是固定不變的。類的常量成員是一種符號(hào)常量,符號(hào)常量是由用戶根據(jù)需要自行創(chuàng)建的常量,在程序設(shè)計(jì)符號(hào)常量是由用戶根據(jù)需要自行創(chuàng)建的常量,在程序設(shè)計(jì)過
26、程中可能需要反復(fù)使用到某個(gè)數(shù)據(jù),如圓周率過程中可能需要反復(fù)使用到某個(gè)數(shù)據(jù),如圓周率3.1415926,如果在代碼中反復(fù)書寫,不僅麻煩而且容易,如果在代碼中反復(fù)書寫,不僅麻煩而且容易出現(xiàn)書名錯(cuò)誤,此時(shí),可考慮將其聲明為一個(gè)符號(hào)常量,出現(xiàn)書名錯(cuò)誤,此時(shí),可考慮將其聲明為一個(gè)符號(hào)常量,用戶定義符號(hào)常量使用用戶定義符號(hào)常量使用const關(guān)鍵字,在定義時(shí),必須指關(guān)鍵字,在定義時(shí),必須指定名稱和值,其一般形式如下:定名稱和值,其一般形式如下:l訪問修飾符訪問修飾符 const 數(shù)據(jù)類型數(shù)據(jù)類型 常量名常量名=常量的值常量的值;4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l2字段字段l字段表示類的成員變
27、量,字段的值代表某個(gè)對(duì)象的數(shù)據(jù)狀字段表示類的成員變量,字段的值代表某個(gè)對(duì)象的數(shù)據(jù)狀態(tài)。不同的對(duì)象,數(shù)據(jù)狀態(tài)不同,意味著各字段的值也不態(tài)。不同的對(duì)象,數(shù)據(jù)狀態(tài)不同,意味著各字段的值也不同。聲明字段的方法與定義普通變量的方法相同,其一般同。聲明字段的方法與定義普通變量的方法相同,其一般格式如下:格式如下:l訪問修飾符訪問修飾符 數(shù)據(jù)類型數(shù)據(jù)類型 字段名字段名;l其中,訪問修飾符用來控制字段的訪問級(jí)別,可省略。例其中,訪問修飾符用來控制字段的訪問級(jí)別,可省略。例如:如:lpublic double radius;4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l3屬性屬性l字段和常量描述了類的數(shù)據(jù),
28、當(dāng)這些數(shù)據(jù)允許外界訪問時(shí),可以使用字段和常量描述了類的數(shù)據(jù),當(dāng)這些數(shù)據(jù)允許外界訪問時(shí),可以使用訪問修飾符訪問修飾符public,不允許外界訪問時(shí),可以使用,不允許外界訪問時(shí),可以使用private或或protected l定義屬性的一般形式如下:定義屬性的一般形式如下:l訪問修飾符訪問修飾符 數(shù)據(jù)類型數(shù)據(jù)類型 屬性名屬性名l get /獲取屬性的代碼,用獲取屬性的代碼,用return 返回值返回值 set /設(shè)置屬性的代碼,用設(shè)置屬性的代碼,用value賦值賦值 4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l【實(shí)例【實(shí)例4-2】定義類的數(shù)據(jù)成員及屬性?!慷x類的數(shù)據(jù)成員及屬性。 4.2.3
29、 類的可訪問性類的可訪問性l為了控制類和類成員的作用范圍或訪問級(jí)別,為了控制類和類成員的作用范圍或訪問級(jí)別,c#提供了訪問修提供了訪問修飾符,用于限制對(duì)類和類成員的訪問屬性。這些訪問修飾符包飾符,用于限制對(duì)類和類成員的訪問屬性。這些訪問修飾符包括括public、private、internal、protected、protected internall在使用訪問修飾符來定義命名空間、結(jié)構(gòu)和類及其成員時(shí),要在使用訪問修飾符來定義命名空間、結(jié)構(gòu)和類及其成員時(shí),要注意以下幾點(diǎn)。注意以下幾點(diǎn)。l(1) 一個(gè)成員或類型只能有一個(gè)訪問修飾符,使用一個(gè)成員或類型只能有一個(gè)訪問修飾符,使用 protected
30、 internal 組合時(shí)除外。組合時(shí)除外。l(2) 命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制。l(3) 如果未指定訪問修飾符,則使用默認(rèn)的可訪問性,類的成員如果未指定訪問修飾符,則使用默認(rèn)的可訪問性,類的成員默認(rèn)為默認(rèn)為private,如實(shí)例,如實(shí)例4-2中的中的pi沒有指定訪問修飾符,默認(rèn)為沒有指定訪問修飾符,默認(rèn)為private。l(4) 第一級(jí)類型(指不嵌套在其他類型中的類型)的可訪問性只第一級(jí)類型(指不嵌套在其他類型中的類型)的可訪問性只能是能是internal或或public,默認(rèn)可訪問性是,默認(rèn)可訪問性是intern
31、al,如實(shí)例,如實(shí)例4-2中中的的circle類沒有指定訪問修飾符,默認(rèn)為類沒有指定訪問修飾符,默認(rèn)為internal。4.2.4 值類型與引用類型值類型與引用類型lc#將數(shù)據(jù)類型分為值類型將數(shù)據(jù)類型分為值類型(value type)和引用類型和引用類型(reference type)。l1值類型值類型l值類型變量直接包含其本身的數(shù)據(jù),前面提到的值類型變量直接包含其本身的數(shù)據(jù),前面提到的簡單類型簡單類型(int、bool、char、float、double、decimal)、結(jié)構(gòu)類型、結(jié)構(gòu)類型(struct)、枚舉類型、枚舉類型(enum)等等都是值類型。在定義一個(gè)值類型變量后,將直接都是值類
32、型。在定義一個(gè)值類型變量后,將直接為該變量分配空間,可以直接賦值和使用。為該變量分配空間,可以直接賦值和使用。 4.2.4 值類型與引用類型值類型與引用類型l引用類型引用類型l與值類型不同,引用類型變量本身并不包含數(shù)據(jù),只是存與值類型不同,引用類型變量本身并不包含數(shù)據(jù),只是存儲(chǔ)對(duì)數(shù)據(jù)的引用,數(shù)據(jù)保存在其他位置,數(shù)組、字符串、儲(chǔ)對(duì)數(shù)據(jù)的引用,數(shù)據(jù)保存在其他位置,數(shù)組、字符串、類和后面要介紹的接口、委托等都屬于引用類型。引用型類和后面要介紹的接口、委托等都屬于引用類型。引用型變量在定義時(shí)并不會(huì)分配空間,只是在對(duì)其實(shí)例化后才真變量在定義時(shí)并不會(huì)分配空間,只是在對(duì)其實(shí)例化后才真正的分配存儲(chǔ)空間。正的分
33、配存儲(chǔ)空間。 4.2.4 值類型與引用類型值類型與引用類型l3裝箱和折箱裝箱和折箱l對(duì)于值類型來說,可以通過隱式轉(zhuǎn)換方法或顯示轉(zhuǎn)換方法對(duì)于值類型來說,可以通過隱式轉(zhuǎn)換方法或顯示轉(zhuǎn)換方法進(jìn)行數(shù)據(jù)轉(zhuǎn)換;對(duì)于引用類型來說,進(jìn)行數(shù)據(jù)轉(zhuǎn)換;對(duì)于引用類型來說,c#同樣允許將任何類同樣允許將任何類型的數(shù)據(jù)轉(zhuǎn)換為對(duì)象,或者將任何類型的對(duì)象轉(zhuǎn)換為與之型的數(shù)據(jù)轉(zhuǎn)換為對(duì)象,或者將任何類型的對(duì)象轉(zhuǎn)換為與之兼容的數(shù)據(jù)類型。兼容的數(shù)據(jù)類型。lc#把值類型轉(zhuǎn)換為對(duì)象的操作稱為裝箱,而把對(duì)象轉(zhuǎn)換為把值類型轉(zhuǎn)換為對(duì)象的操作稱為裝箱,而把對(duì)象轉(zhuǎn)換為兼容的值類型的操作稱為拆箱。兼容的值類型的操作稱為拆箱。c#的這種裝箱與拆箱操作的
34、這種裝箱與拆箱操作類似于收發(fā)郵政包裹,發(fā)送包裹之前先裝箱打包,收到包類似于收發(fā)郵政包裹,發(fā)送包裹之前先裝箱打包,收到包裹后再拆箱解包。裹后再拆箱解包。l裝箱意味著把一個(gè)值類型的數(shù)據(jù)轉(zhuǎn)換為一個(gè)對(duì)象類型的數(shù)裝箱意味著把一個(gè)值類型的數(shù)據(jù)轉(zhuǎn)換為一個(gè)對(duì)象類型的數(shù)據(jù),裝箱過程是隱式轉(zhuǎn)換過程,由系統(tǒng)自動(dòng)完成,據(jù),裝箱過程是隱式轉(zhuǎn)換過程,由系統(tǒng)自動(dòng)完成,c#中中object類是所有類的最終基類,因此,可以將一個(gè)值類型類是所有類的最終基類,因此,可以將一個(gè)值類型變量直接賦值給變量直接賦值給object對(duì)象對(duì)象 4.3 類的方法類的方法l4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用 l4.3.2 方法的參數(shù)傳遞方
35、法的參數(shù)傳遞l4.3.3 方法的重載方法的重載 4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用 l方法的使用分聲明與調(diào)用兩個(gè)環(huán)節(jié)。方法的使用分聲明與調(diào)用兩個(gè)環(huán)節(jié)。l1方法的聲明方法的聲明l聲明方法的一般形式如下:聲明方法的一般形式如下: 訪問修飾符訪問修飾符 返回值類型返回值類型 方法名方法名 (參數(shù)列表參數(shù)列表) 語句語句; return 返回值返回值; 4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用 l(1) 訪問修飾符控制方法的訪問級(jí)別,可用于方法的修訪問修飾符控制方法的訪問級(jí)別,可用于方法的修飾符包括飾符包括public、protected、private和和internal等;等;訪問修
36、飾符是可選的,默認(rèn)情況下為訪問修飾符是可選的,默認(rèn)情況下為 privatel(2) 方法的返回類型用于指定由該方法計(jì)算和返回的值方法的返回類型用于指定由該方法計(jì)算和返回的值的類型,可以是任何合法的數(shù)據(jù)類型,包括值類型和的類型,可以是任何合法的數(shù)據(jù)類型,包括值類型和引用類型,如果一個(gè)方法不返回一個(gè)值,則返回值類引用類型,如果一個(gè)方法不返回一個(gè)值,則返回值類型使用型使用void關(guān)鍵字來表示;關(guān)鍵字來表示;l(3) 方法名必須符合方法名必須符合c#的命名規(guī)范,與變量名的命名的命名規(guī)范,與變量名的命名規(guī)則相同;規(guī)則相同;4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用l(4) 參數(shù)列表是方法可以接受的輸入
37、數(shù)據(jù),當(dāng)方法不需要參參數(shù)列表是方法可以接受的輸入數(shù)據(jù),當(dāng)方法不需要參數(shù)時(shí),可省略參數(shù)列表,但不能省略圓括號(hào);當(dāng)參數(shù)不止數(shù)時(shí),可省略參數(shù)列表,但不能省略圓括號(hào);當(dāng)參數(shù)不止一個(gè)時(shí),需要使用逗號(hào)分隔,同時(shí)每一個(gè)參數(shù)都必須聲明一個(gè)時(shí),需要使用逗號(hào)分隔,同時(shí)每一個(gè)參數(shù)都必須聲明數(shù)據(jù)類型,即使這些參數(shù)的數(shù)據(jù)類型相同也不例外;數(shù)據(jù)類型,即使這些參數(shù)的數(shù)據(jù)類型相同也不例外;l(5) 花括號(hào)中的內(nèi)容為方法的主體,由若干條語句組成,每花括號(hào)中的內(nèi)容為方法的主體,由若干條語句組成,每一條語句都必須使用分號(hào)結(jié)尾。當(dāng)方法結(jié)束時(shí)如果需要返一條語句都必須使用分號(hào)結(jié)尾。當(dāng)方法結(jié)束時(shí)如果需要返回操作結(jié)果,則使用回操作結(jié)果,則使
38、用return語句返回,并且返回的值的類語句返回,并且返回的值的類型要與返回值的類型相匹配。如果使用型要與返回值的類型相匹配。如果使用void標(biāo)記方法為無標(biāo)記方法為無返回值的方法,可省略返回值的方法,可省略return語句。語句。4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用l2方法的調(diào)用方法的調(diào)用l一個(gè)方法一旦在某個(gè)類中聲明,就可由其他方法調(diào)用,調(diào)一個(gè)方法一旦在某個(gè)類中聲明,就可由其他方法調(diào)用,調(diào)用者既可以是同一個(gè)類中的方法,也可以是其他類中的方用者既可以是同一個(gè)類中的方法,也可以是其他類中的方法。如果調(diào)用者是同一個(gè)類的方法,則可以直接調(diào)用,如法。如果調(diào)用者是同一個(gè)類的方法,則可以直接調(diào)用,如
39、果調(diào)用者是其他類中的方法,則需要通過類的實(shí)例來引用果調(diào)用者是其他類中的方法,則需要通過類的實(shí)例來引用,但靜態(tài)方法例外,靜態(tài)方法通過類名直接調(diào)用,但靜態(tài)方法例外,靜態(tài)方法通過類名直接調(diào)用 l(1) 在方法聲明的類定義中調(diào)用該方法。其語法格式為:在方法聲明的類定義中調(diào)用該方法。其語法格式為: 方法名方法名(參數(shù)列表參數(shù)列表) l(2) 在方法聲明的類定義外部調(diào)用該方法,需要通過類聲明在方法聲明的類定義外部調(diào)用該方法,需要通過類聲明的對(duì)象調(diào)用該方法,其格式為:的對(duì)象調(diào)用該方法,其格式為: 對(duì)象名對(duì)象名.方法名方法名(參數(shù)列表參數(shù)列表)4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l在聲明方法時(shí),所定義的參
40、數(shù)是形式參數(shù)(簡稱形參),在聲明方法時(shí),所定義的參數(shù)是形式參數(shù)(簡稱形參),這些參數(shù)的值由調(diào)用方負(fù)責(zé)為其傳遞,調(diào)用方傳遞的是實(shí)這些參數(shù)的值由調(diào)用方負(fù)責(zé)為其傳遞,調(diào)用方傳遞的是實(shí)際數(shù)據(jù),稱為實(shí)際參數(shù)(簡稱實(shí)參),調(diào)用方必須嚴(yán)格按際數(shù)據(jù),稱為實(shí)際參數(shù)(簡稱實(shí)參),調(diào)用方必須嚴(yán)格按照被調(diào)用的方法所定義的參數(shù)類型和順序指定實(shí)參。在調(diào)照被調(diào)用的方法所定義的參數(shù)類型和順序指定實(shí)參。在調(diào)用方法時(shí),參數(shù)傳遞就是將實(shí)參傳遞給形參的過程。用方法時(shí),參數(shù)傳遞就是將實(shí)參傳遞給形參的過程。l方法的參數(shù)傳遞按性質(zhì)可分為按值傳遞與按引用傳遞。方法的參數(shù)傳遞按性質(zhì)可分為按值傳遞與按引用傳遞。4.3.2 方法的參數(shù)傳遞方法的參
41、數(shù)傳遞l1按值傳參按值傳參l按值傳參時(shí),把實(shí)參變量的值賦給相對(duì)應(yīng)的形參變量,即按值傳參時(shí),把實(shí)參變量的值賦給相對(duì)應(yīng)的形參變量,即被調(diào)用的方法所接收到的只是實(shí)參數(shù)據(jù)值的一個(gè)副本。當(dāng)被調(diào)用的方法所接收到的只是實(shí)參數(shù)據(jù)值的一個(gè)副本。當(dāng)在方法內(nèi)部更改了形參變量的數(shù)據(jù)值時(shí),不會(huì)影響實(shí)參變?cè)诜椒▋?nèi)部更改了形參變量的數(shù)據(jù)值時(shí),不會(huì)影響實(shí)參變量的值,即實(shí)參變量和形參變量是兩個(gè)不相同的變量,他量的值,即實(shí)參變量和形參變量是兩個(gè)不相同的變量,他們具有各自的內(nèi)存地址和數(shù)據(jù)值。因此,實(shí)參變量的值傳們具有各自的內(nèi)存地址和數(shù)據(jù)值。因此,實(shí)參變量的值傳遞給形參變量時(shí)是一種單向值傳遞。遞給形參變量時(shí)是一種單向值傳遞。l值類型
42、的參數(shù)在傳遞時(shí)默認(rèn)為按值傳參。值類型的參數(shù)在傳遞時(shí)默認(rèn)為按值傳參。string和和object雖然是引用型數(shù)據(jù),但從表現(xiàn)形式來看,其具有按值傳參雖然是引用型數(shù)據(jù),但從表現(xiàn)形式來看,其具有按值傳參的效果。的效果。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實(shí)例【實(shí)例4-3】用值傳參進(jìn)行參數(shù)值交換】用值傳參進(jìn)行參數(shù)值交換 4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l2按引用傳參按引用傳參l方法只能返回一個(gè)值,但在實(shí)際應(yīng)用中常常需要方法能夠返回方法只能返回一個(gè)值,但在實(shí)際應(yīng)用中常常需要方法能夠返回多個(gè)值或修改傳入的參數(shù)值并返回,如果需要完成以上任務(wù),多個(gè)值或修改傳入的參數(shù)值并返回,如果需要完成以上任務(wù)
43、,只用只用return語句是無法做到的,這時(shí)可以使用按引用傳遞參數(shù)的語句是無法做到的,這時(shí)可以使用按引用傳遞參數(shù)的方式來實(shí)現(xiàn)。方式來實(shí)現(xiàn)。l調(diào)用方向方法傳遞引用型參數(shù)時(shí),調(diào)用方將把實(shí)參變量的引用調(diào)用方向方法傳遞引用型參數(shù)時(shí),調(diào)用方將把實(shí)參變量的引用賦給相對(duì)應(yīng)的形參變量。實(shí)參變量的引用代表數(shù)據(jù)值的內(nèi)存地賦給相對(duì)應(yīng)的形參變量。實(shí)參變量的引用代表數(shù)據(jù)值的內(nèi)存地址,因此,形參變量和實(shí)參變量將指向同一個(gè)引用。如果在方址,因此,形參變量和實(shí)參變量將指向同一個(gè)引用。如果在方法內(nèi)部更改了形參變量所引用的數(shù)據(jù)值,則同時(shí)也修改了實(shí)參法內(nèi)部更改了形參變量所引用的數(shù)據(jù)值,則同時(shí)也修改了實(shí)參變量所引用的數(shù)據(jù)值。變量所引
44、用的數(shù)據(jù)值。l當(dāng)值類型和當(dāng)值類型和string類型參數(shù)要按引用方式傳參時(shí),可以通過類型參數(shù)要按引用方式傳參時(shí),可以通過ref關(guān)鍵字來聲明引用參數(shù),無論是形參還是實(shí)參,只要希望傳遞關(guān)鍵字來聲明引用參數(shù),無論是形參還是實(shí)參,只要希望傳遞數(shù)據(jù)的引用,就必須添加數(shù)據(jù)的引用,就必須添加ref關(guān)鍵字。關(guān)鍵字。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實(shí)例【實(shí)例4-4】用引用傳參進(jìn)行參數(shù)值交換?!坑靡脗鲄⑦M(jìn)行參數(shù)值交換。 (1) 將【實(shí)例將【實(shí)例4-3】swap方法聲明改為引用型參數(shù):方法聲明改為引用型參數(shù): public string swap(ref int x,ref int y) (2) 將【實(shí)
45、例將【實(shí)例4-3】swap方法調(diào)用改為引用型傳參:方法調(diào)用改為引用型傳參: lblshow.text = s.swap(ref a, ref b);4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l3輸出參數(shù)輸出參數(shù)l方法中的方法中的return語句只能返回一個(gè)運(yùn)算結(jié)果,雖然也可以語句只能返回一個(gè)運(yùn)算結(jié)果,雖然也可以使用引用型參數(shù)返回計(jì)算結(jié)果,但用使用引用型參數(shù)返回計(jì)算結(jié)果,但用ref修飾的參數(shù)在傳參修飾的參數(shù)在傳參前要求先初始化實(shí)參。但有時(shí)候參數(shù)在傳參前無法確定其前要求先初始化實(shí)參。但有時(shí)候參數(shù)在傳參前無法確定其值,其值應(yīng)由方法調(diào)用結(jié)束后返回,所在在傳參前確定其值,其值應(yīng)由方法調(diào)用結(jié)束后返回,所在在
46、傳參前確定其值是沒有意義的。這時(shí)可以使用輸出參數(shù),輸出參數(shù)不需值是沒有意義的。這時(shí)可以使用輸出參數(shù),輸出參數(shù)不需要對(duì)實(shí)參進(jìn)行初始化,它專門用于把方法中的數(shù)據(jù)通過形要對(duì)實(shí)參進(jìn)行初始化,它專門用于把方法中的數(shù)據(jù)通過形參返回給實(shí)參,但不會(huì)將實(shí)參的值傳遞給形參。一個(gè)方法參返回給實(shí)參,但不會(huì)將實(shí)參的值傳遞給形參。一個(gè)方法中可允許有多個(gè)輸出參數(shù)。中可允許有多個(gè)輸出參數(shù)。lc#通過通過out關(guān)鍵字來聲明輸出參數(shù),無論是形參還是實(shí)參關(guān)鍵字來聲明輸出參數(shù),無論是形參還是實(shí)參,只要是輸出參數(shù),都必須添加,只要是輸出參數(shù),都必須添加out關(guān)鍵字。關(guān)鍵字。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實(shí)例【實(shí)例4-5】
47、用輸出參數(shù)求文件路徑中的目錄和文】用輸出參數(shù)求文件路徑中的目錄和文件名。件名。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l4引用類型數(shù)據(jù)的傳參引用類型數(shù)據(jù)的傳參l引用類型參數(shù)總是按引用傳遞的,所以引用類型參數(shù)傳遞引用類型參數(shù)總是按引用傳遞的,所以引用類型參數(shù)傳遞不需要使用不需要使用ref或或out關(guān)鍵字關(guān)鍵字(string除外除外),引用類型參數(shù)的,引用類型參數(shù)的傳遞,實(shí)際上是將實(shí)參對(duì)數(shù)據(jù)的引用復(fù)制給了形參。所以傳遞,實(shí)際上是將實(shí)參對(duì)數(shù)據(jù)的引用復(fù)制給了形參。所以形參與實(shí)參共同指向同一個(gè)內(nèi)存區(qū)域。形參與實(shí)參共同指向同一個(gè)內(nèi)存區(qū)域。l【實(shí)例【實(shí)例4-6】用引用類型數(shù)據(jù)的傳參修改對(duì)象值。】用引用類型數(shù)
48、據(jù)的傳參修改對(duì)象值。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l5數(shù)組型參數(shù)數(shù)組型參數(shù)l數(shù)組也是引用類型數(shù)據(jù),把數(shù)組作為參數(shù)傳遞時(shí),也數(shù)組也是引用類型數(shù)據(jù),把數(shù)組作為參數(shù)傳遞時(shí),也是引用傳參。但把數(shù)組作為參數(shù),有兩種使用形式:是引用傳參。但把數(shù)組作為參數(shù),有兩種使用形式:一種是在形參數(shù)組前不添加一種是在形參數(shù)組前不添加params修飾符,另一種是修飾符,另一種是在形參數(shù)組前添加在形參數(shù)組前添加params修飾符。不添加修飾符。不添加params修修飾符時(shí),所對(duì)應(yīng)的實(shí)參必須是一個(gè)數(shù)組名;添加飾符時(shí),所對(duì)應(yīng)的實(shí)參必須是一個(gè)數(shù)組名;添加params修飾符時(shí),所對(duì)應(yīng)的實(shí)參可以是數(shù)組名,也可修飾符時(shí),所對(duì)
49、應(yīng)的實(shí)參可以是數(shù)組名,也可以是數(shù)組元素值的列表,此時(shí),系統(tǒng)將自動(dòng)把各種元以是數(shù)組元素值的列表,此時(shí),系統(tǒng)將自動(dòng)把各種元素值組織到一個(gè)數(shù)組中。無論采用哪一種形式,形參素值組織到一個(gè)數(shù)組中。無論采用哪一種形式,形參數(shù)組都不能定義數(shù)組的長度。數(shù)組都不能定義數(shù)組的長度。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實(shí)例【實(shí)例4-7】使用不添加】使用不添加params和添加和添加params修修改符的數(shù)組傳參求數(shù)組中的最大值。改符的數(shù)組傳參求數(shù)組中的最大值。4.3.3 方法的重載方法的重載l在編程時(shí),一般是一個(gè)方法對(duì)應(yīng)一種功能,但有時(shí)需要實(shí)在編程時(shí),一般是一個(gè)方法對(duì)應(yīng)一種功能,但有時(shí)需要實(shí)現(xiàn)同一類功能,只
50、是有些細(xì)節(jié)不同。例如希望從幾個(gè)數(shù)中現(xiàn)同一類功能,只是有些細(xì)節(jié)不同。例如希望從幾個(gè)數(shù)中找出其中的最大者,而每次數(shù)據(jù)個(gè)數(shù)或類型不同,如找出其中的最大者,而每次數(shù)據(jù)個(gè)數(shù)或類型不同,如2個(gè)整個(gè)整數(shù),數(shù),2個(gè)雙精度數(shù)、個(gè)雙精度數(shù)、3個(gè)整數(shù)、或一個(gè)整型數(shù)組做為參數(shù)。個(gè)整數(shù)、或一個(gè)整型數(shù)組做為參數(shù)。這時(shí),我們可以設(shè)計(jì)出這時(shí),我們可以設(shè)計(jì)出4個(gè)不同名的方法,其形式為:個(gè)不同名的方法,其形式為: public int maxinttwo(int a, int b) public double maxdouble(double a, double b) public int maxintthree(int a,
51、int b, int c) public int maxarray(int a) l這時(shí),程序者需要以不同的方法名來命名這些功能類似的這時(shí),程序者需要以不同的方法名來命名這些功能類似的方法,而調(diào)用者更需記住不同的方法名,不是很方便,在方法,而調(diào)用者更需記住不同的方法名,不是很方便,在c#中,允許用同一方法名定義多個(gè)方法,這些方法的參數(shù)中,允許用同一方法名定義多個(gè)方法,這些方法的參數(shù)個(gè)數(shù)或參數(shù)類型不同,這就是方法的重載個(gè)數(shù)或參數(shù)類型不同,這就是方法的重載(function overloading)。4.3.3 方法的重載方法的重載l方法重載有兩點(diǎn)要求:方法重載有兩點(diǎn)要求: (1) 重載的方法名稱
52、必須相同;重載的方法名稱必須相同; (2) 重載方法的形參個(gè)數(shù)或類型必須不同,否則將出現(xiàn)一個(gè)重載方法的形參個(gè)數(shù)或類型必須不同,否則將出現(xiàn)一個(gè)“已定義了一個(gè)具有相同參數(shù)類型的成員已定義了一個(gè)具有相同參數(shù)類型的成員”l如果要完成上例相似功能的如果要完成上例相似功能的4個(gè)方法,重載方法如下:個(gè)方法,重載方法如下: public int max(int a, int b) public double max(double a, double b) public int max(int a, int b, int c) public int max(int a) l在調(diào)用具有重載的方法時(shí),系統(tǒng)會(huì)根據(jù)參數(shù)
53、的類型或個(gè)數(shù)在調(diào)用具有重載的方法時(shí),系統(tǒng)會(huì)根據(jù)參數(shù)的類型或個(gè)數(shù)確定最匹配的方法被調(diào)用。確定最匹配的方法被調(diào)用。4.3.3 方法的重載方法的重載l【實(shí)例【實(shí)例4-8】利用方法重載實(shí)現(xiàn)】利用方法重載實(shí)現(xiàn)2個(gè)整數(shù),個(gè)整數(shù),2個(gè)雙精個(gè)雙精度數(shù)、度數(shù)、3個(gè)整數(shù)中求最大值。個(gè)整數(shù)中求最大值。4.4 構(gòu)造函數(shù)構(gòu)造函數(shù)l4.4.1 構(gòu)造函數(shù)的聲明和調(diào)用構(gòu)造函數(shù)的聲明和調(diào)用 l4.4.2 構(gòu)造函數(shù)的重載構(gòu)造函數(shù)的重載 l4.4.3 構(gòu)造函數(shù)與只讀字段構(gòu)造函數(shù)與只讀字段 l4.4.4 對(duì)象的生命周期和析構(gòu)函數(shù)對(duì)象的生命周期和析構(gòu)函數(shù)4.4.1 構(gòu)造函數(shù)的聲明和調(diào)用構(gòu)造函數(shù)的聲明和調(diào)用 l構(gòu)造函數(shù)是類中的一種特殊的
54、方法,其一般形式如下:構(gòu)造函數(shù)是類中的一種特殊的方法,其一般形式如下: public 構(gòu)造函數(shù)名構(gòu)造函數(shù)名(參數(shù)列表參數(shù)列表) 語句語句; l和普通方法相比,構(gòu)造函數(shù)有兩個(gè)特別要求,一是構(gòu)造函和普通方法相比,構(gòu)造函數(shù)有兩個(gè)特別要求,一是構(gòu)造函數(shù)的名稱必須和類名相同,二是構(gòu)造函數(shù)不允許有返回類數(shù)的名稱必須和類名相同,二是構(gòu)造函數(shù)不允許有返回類型(包括型(包括void類型)。類型)。l其中,構(gòu)造函數(shù)的參數(shù)列表可省略,也可以不包含任何語其中,構(gòu)造函數(shù)的參數(shù)列表可省略,也可以不包含任何語句。不包含任何參數(shù)和語句的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)句。不包含任何參數(shù)和語句的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。如果沒有定義構(gòu)
55、造函數(shù),編譯器將自動(dòng)生成默認(rèn)構(gòu)造函。如果沒有定義構(gòu)造函數(shù),編譯器將自動(dòng)生成默認(rèn)構(gòu)造函數(shù)由,默認(rèn)構(gòu)造函數(shù)的形式如下:數(shù)由,默認(rèn)構(gòu)造函數(shù)的形式如下: public 構(gòu)造函數(shù)名構(gòu)造函數(shù)名() 4.4.2 構(gòu)造函數(shù)的重載構(gòu)造函數(shù)的重載l構(gòu)造函數(shù)重載與方法一樣可以重載。在一個(gè)類中,可以定義多構(gòu)造函數(shù)重載與方法一樣可以重載。在一個(gè)類中,可以定義多個(gè)構(gòu)造函數(shù),以便對(duì)對(duì)象提供不同的初始化方法,以滿足創(chuàng)建個(gè)構(gòu)造函數(shù),以便對(duì)對(duì)象提供不同的初始化方法,以滿足創(chuàng)建對(duì)象時(shí)的不同需要。例如,在創(chuàng)建一個(gè)對(duì)象時(shí)的不同需要。例如,在創(chuàng)建一個(gè)student對(duì)象時(shí),只想指對(duì)象時(shí),只想指定定name的值,而的值,而age為默認(rèn)的為默
56、認(rèn)的20??梢月暶饕粋€(gè)如下所示的構(gòu)??梢月暶饕粋€(gè)如下所示的構(gòu)造函數(shù):造函數(shù):lpublic student(string name) = name; this.age = 20; l該構(gòu)造函數(shù)和以上面的該構(gòu)造函數(shù)和以上面的public student(string name, int age)構(gòu)造函數(shù)相比,參數(shù)的個(gè)數(shù)不同,是一個(gè)合法的構(gòu)造函數(shù)。此構(gòu)造函數(shù)相比,參數(shù)的個(gè)數(shù)不同,是一個(gè)合法的構(gòu)造函數(shù)。此時(shí),可以聲明一個(gè)只有一個(gè)實(shí)參的對(duì)象:時(shí),可以聲明一個(gè)只有一個(gè)實(shí)參的對(duì)象: student stu = new student(郭靖郭靖);4.4.2 構(gòu)造函數(shù)的重載構(gòu)造函數(shù)的重載
57、l【實(shí)例【實(shí)例4-9】利用構(gòu)造函數(shù)重載實(shí)現(xiàn)不同對(duì)象實(shí)例】利用構(gòu)造函數(shù)重載實(shí)現(xiàn)不同對(duì)象實(shí)例化。化。4.4.3 構(gòu)造函數(shù)與只讀字段構(gòu)造函數(shù)與只讀字段lc#中類的字段成員可通過關(guān)鍵字中類的字段成員可通過關(guān)鍵字readonly設(shè)置為設(shè)置為只讀字段,對(duì)于標(biāo)記為只讀的字段來說,只有在只讀字段,對(duì)于標(biāo)記為只讀的字段來說,只有在聲明時(shí)為它賦值,或者在對(duì)象初始化時(shí)賦值。在聲明時(shí)為它賦值,或者在對(duì)象初始化時(shí)賦值。在聲明時(shí)為只讀字段賦值與聲明常量沒有區(qū)別,在聲明時(shí)為只讀字段賦值與聲明常量沒有區(qū)別,在對(duì)象初始化時(shí)為只讀字段賦值需要使用構(gòu)造函數(shù)對(duì)象初始化時(shí)為只讀字段賦值需要使用構(gòu)造函數(shù)實(shí)現(xiàn)。實(shí)現(xiàn)。4.4.3 構(gòu)造函數(shù)與只讀字段構(gòu)造函數(shù)與只讀字段l【實(shí)例【實(shí)例4-10】公園門票調(diào)價(jià)問題】公園門票調(diào)價(jià)問題。4.4.4 對(duì)象的生命周期和析構(gòu)函數(shù)對(duì)象的生命周期和析構(gòu)函數(shù) lc#程序中,一個(gè)對(duì)象是類的一個(gè)實(shí)例,實(shí)際上就是一個(gè)引程序中,一個(gè)對(duì)象是類的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東省中考模擬歷史試題(原卷版+解析版)
- 當(dāng)前世界經(jīng)濟(jì)形勢(shì)1468792390
- 九年紀(jì)上語文知識(shí)點(diǎn)梳理
- 2025年黨員領(lǐng)導(dǎo)干部廉政法規(guī)知識(shí)考試題庫及答案(共130題)
- 體育體測檢討書
- FAMILYDAY員工家庭日活動(dòng)
- 醫(yī)藥航空運(yùn)輸服務(wù)協(xié)議
- 氫能項(xiàng)目可行性研究報(bào)告
- 項(xiàng)目監(jiān)控工程
- 聰明屋智能家居系統(tǒng)
- 2025年合肥共達(dá)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案
- 2025美國急性冠脈綜合征(ACS)患者管理指南解讀課件
- 足球迷互動(dòng)活動(dòng)策劃與執(zhí)行策略
- 2025年寧夏工商職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫帶答案
- ESC+2024+心房顫動(dòng)(房顫)管理指南解讀
- 2019地質(zhì)災(zāi)害防治工程工程量清單計(jì)價(jià)規(guī)范
- 2022-2024年江蘇中考英語試題匯編:任務(wù)型閱讀填空和閱讀回答問題(教師)
- 游戲跨文化傳播-洞察分析
- 河北石家莊市市屬國有企業(yè)招聘筆試沖刺題2025
- 2025-2030年中國鐵合金冶煉行業(yè)競爭格局展望及投資策略分析報(bào)告
- 維護(hù)醫(yī)?;鸢踩?/a>
評(píng)論
0/150
提交評(píng)論