C#-Ch4-面向?qū)ο蟪绦蛟O(shè)計剖析_第1頁
C#-Ch4-面向?qū)ο蟪绦蛟O(shè)計剖析_第2頁
C#-Ch4-面向?qū)ο蟪绦蛟O(shè)計剖析_第3頁
C#-Ch4-面向?qū)ο蟪绦蛟O(shè)計剖析_第4頁
C#-Ch4-面向?qū)ο蟪绦蛟O(shè)計剖析_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-5-21項目一項目一: 類的定義及屬性的定義和使用類的定義及屬性的定義和使用項目二項目二: 時間顯示窗體時間顯示窗體,類的字段類的字段構(gòu)造函構(gòu)造函數(shù)數(shù)只讀屬性的用法只讀屬性的用法 .第四章第四章 面向?qū)ο蟪绦蛟O(shè)計入門面向?qū)ο蟪绦蛟O(shè)計入門1. 總體要求總體要求l理解面向?qū)ο蟮幕靖拍?,正確區(qū)分類和對象,對象的聲明理解面向?qū)ο蟮幕靖拍?,正確區(qū)分類和對象,對象的聲明和對象的創(chuàng)建。和對象的創(chuàng)建。l掌握類的定義與使用方法,正確定義類的數(shù)據(jù)成員、屬性和掌握類的定義與使用方法,正確定義類的數(shù)據(jù)成員、屬性和方法。方法。l理解類的可訪問性、正確使用訪問修飾符控制對類成員的訪理解類的可訪問性、正確使用

2、訪問修飾符控制對類成員的訪問。問。l掌握類的方法的定義、調(diào)用與重載,理解方法的參數(shù)傳遞的掌握類的方法的定義、調(diào)用與重載,理解方法的參數(shù)傳遞的工作機制。工作機制。l理解值類型和引用類型的區(qū)別。理解值類型和引用類型的區(qū)別。l理解構(gòu)造函數(shù)與析構(gòu)函數(shù)的作用,掌握其使用方法。理解構(gòu)造函數(shù)與析構(gòu)函數(shù)的作用,掌握其使用方法。l方法的重載和參數(shù)傳遞方法的重載和參數(shù)傳遞2. 學(xué)習(xí)重點學(xué)習(xí)重點lC#中類的定義、類的數(shù)據(jù)成員、屬性和方法中類的定義、類的數(shù)據(jù)成員、屬性和方法l類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)l方法的重載和參數(shù)傳遞方法的重載和參數(shù)傳遞第四章第四章 面向?qū)ο蟪绦蛟O(shè)計入門面向?qū)ο蟪绦蛟O(shè)計入門 3. 學(xué)習(xí)學(xué)習(xí)難難點點

3、l類和對象的關(guān)系類和對象的關(guān)系l方法的重載和參數(shù)傳遞方法的重載和參數(shù)傳遞l值類型和引用類型及對象的生命周期值類型和引用類型及對象的生命周期第四章第四章 面向?qū)ο蟪绦蛟O(shè)計入門面向?qū)ο蟪绦蛟O(shè)計入門面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮幕靖拍?(*)類的定義類的定義類的方法類的方法構(gòu)造函數(shù)構(gòu)造函數(shù)(*)2022-5-27l4.1.1 對象對象l4.1.2 事件與方法事件與方法l4.1.3 類與對象類與對象l4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài) 2022-5-28對象對象l客觀世界中任何一個事物都可以看成一個對象客觀世界中任何一個事物都可以看成一個對象(object),對象可以是自然物體(

4、如汽車、房屋、狗),也可以是社對象可以是自然物體(如汽車、房屋、狗),也可以是社會生活中一種邏輯結(jié)構(gòu)(如班級、部門、組織),甚至一會生活中一種邏輯結(jié)構(gòu)(如班級、部門、組織),甚至一篇文章、一個圖形、一項計劃等都可以視作對象。對象是篇文章、一個圖形、一項計劃等都可以視作對象。對象是構(gòu)成系統(tǒng)的基本單位,在實際社會生活中,人們都是在不構(gòu)成系統(tǒng)的基本單位,在實際社會生活中,人們都是在不同的對象中活動的。同的對象中活動的。 l任何一個對象都應(yīng)當(dāng)具有這兩個要素,任何一個對象都應(yīng)當(dāng)具有這兩個要素,即屬性即屬性(attribute)和行為和行為(behavior),一個對象往往由一組屬性和一組行為,一個對象往

5、往由一組屬性和一組行為構(gòu)成,一輛汽車是一個對象,它的屬性是生產(chǎn)廠家、品牌、構(gòu)成,一輛汽車是一個對象,它的屬性是生產(chǎn)廠家、品牌、型號、顏色、價格等,它是行為是它的功能,如發(fā)動、停型號、顏色、價格等,它是行為是它的功能,如發(fā)動、停止、加速等,一般來說,凡是具備屬性和行為這兩個要素止、加速等,一般來說,凡是具備屬性和行為這兩個要素的,都可以作為對象,的,都可以作為對象,對象對象l對象是問題域中某些事物的一個抽象,反映事物對象是問題域中某些事物的一個抽象,反映事物在系統(tǒng)中需要保存的必要信息和發(fā)揮的作用,是在系統(tǒng)中需要保存的必要信息和發(fā)揮的作用,是包含一些特殊屬性(數(shù)據(jù))和服務(wù)(行為方法)包含一些特殊屬

6、性(數(shù)據(jù))和服務(wù)(行為方法)的封裝實體。具體來說,他應(yīng)有唯一的名稱,有的封裝實體。具體來說,他應(yīng)有唯一的名稱,有一系列狀態(tài)(表示為數(shù)據(jù)),有表示對象行為的一系列狀態(tài)(表示為數(shù)據(jù)),有表示對象行為的一系列行為(方法),簡言之:一系列行為(方法),簡言之:l對象對象 = 屬性屬性 + 行為(方法、操作)行為(方法、操作)4.1.2 事件與方法事件與方法l事件事件(Event)又稱為)又稱為消息消息(Message),表示向?qū)Γ?,表示向?qū)ο蟀l(fā)出的服務(wù)請求。方法(象發(fā)出的服務(wù)請求。方法(Method)表示對象能完)表示對象能完成的服務(wù)或執(zhí)行的操作功能。成的服務(wù)或執(zhí)行的操作功能。l在一個系統(tǒng)中的多個對象

7、之間通過一定的渠道相互聯(lián)在一個系統(tǒng)中的多個對象之間通過一定的渠道相互聯(lián)系,要使某一個對象實現(xiàn)某一種行為或操作,應(yīng)當(dāng)向系,要使某一個對象實現(xiàn)某一種行為或操作,應(yīng)當(dāng)向他傳送相應(yīng)的消息。例如想讓汽車行駛,必須由人去他傳送相應(yīng)的消息。例如想讓汽車行駛,必須由人去踩油門,向汽車發(fā)出相應(yīng)的信號。踩油門,向汽車發(fā)出相應(yīng)的信號。對象之間就是這樣對象之間就是這樣通過發(fā)送和接收消息互相聯(lián)系的。通過發(fā)送和接收消息互相聯(lián)系的。l在面向?qū)ο蟮母拍钪?,一個對象可以有多個方法,提供多種服在面向?qū)ο蟮母拍钪?,一個對象可以有多個方法,提供多種服務(wù),完成多種操作功能。但這些方法只有在另外一個對象向他務(wù),完成多種操作功能。但這些方

8、法只有在另外一個對象向他發(fā)出請求之后(發(fā)生事件)才會被執(zhí)行。發(fā)出請求之后(發(fā)生事件)才會被執(zhí)行。 4.1.3 類與對象類與對象l普通邏輯意義上的類是現(xiàn)實世界中各種實體的抽普通邏輯意義上的類是現(xiàn)實世界中各種實體的抽象概念,而對象是現(xiàn)實生活中的一個個實體,例象概念,而對象是現(xiàn)實生活中的一個個實體,例如,在現(xiàn)實世界中大量具體一輛輛汽車、摩托車如,在現(xiàn)實世界中大量具體一輛輛汽車、摩托車、自行車等實體是對象,而交通工具則是這些對、自行車等實體是對象,而交通工具則是這些對象的抽象,交通工具就是一個類。象的抽象,交通工具就是一個類。l在面向?qū)ο蟮母拍钪?,類(在面向?qū)ο蟮母拍钪?,類(Class)表示具有相同)

9、表示具有相同屬性和行為的一組對象的集合,為該類的所有對屬性和行為的一組對象的集合,為該類的所有對象提供統(tǒng)一的抽象描述。象提供統(tǒng)一的抽象描述。 l類是對相似對象的抽象,而對象是該類的一個特類是對相似對象的抽象,而對象是該類的一個特例,類與對象的關(guān)系是抽象與具體的關(guān)系。例,類與對象的關(guān)系是抽象與具體的關(guān)系。 4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l面向?qū)ο蟮淖罨镜奶卣魇浅橄笮浴⒎庋b性、繼承性和多面向?qū)ο蟮淖罨镜奶卣魇浅橄笮?、封裝性、繼承性和多態(tài)性。態(tài)性。l1抽象抽象l抽象(抽象(abstraction)是處理事物復(fù)雜性的方法,只關(guān)注與)是處理事物復(fù)雜性的方法,只關(guān)注與當(dāng)前目標(biāo)

10、有關(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é)號、我們只關(guān)心他們和成績管理有關(guān)的屬性和行為,如學(xué)號、姓名、成績、專業(yè)等特性。抽象的過程是將有關(guān)事物的共姓名、成績、專業(yè)等特性。抽象的過程是將有關(guān)事物的共性歸納、集中的過程,例如凡是有輪子、能滾動并前進(jìn)的性歸納、集中的過程,例如凡是有輪子、能滾動并前進(jìn)的陸地交通工具統(tǒng)稱為陸地交通工具統(tǒng)稱為“車子車子”,把其中用汽油發(fā)動機驅(qū)動,把其中用汽油發(fā)動機驅(qū)動的抽象為的抽象

11、為“汽車汽車”,把用馬拉的抽象為,把用馬拉的抽象為“馬車馬車”。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l抽象能表示同一類事物的本質(zhì)抽象能表示同一類事物的本質(zhì),如果你會使用自己家里的電,如果你會使用自己家里的電視機,在別人家里看到即便是不同的牌子的電視機,你也能視機,在別人家里看到即便是不同的牌子的電視機,你也能對它進(jìn)行操作。因這它具有所有電視機所共有的特征對它進(jìn)行操作。因這它具有所有電視機所共有的特征.lC#中的數(shù)據(jù)類型就是對一系列具體的數(shù)的抽象中的數(shù)據(jù)類型就是對一系列具體的數(shù)的抽象,例如:,例如:int是是對所有整數(shù)的抽象,對所有整數(shù)的抽象,double是對所有雙精度浮點型

12、數(shù)的抽象是對所有雙精度浮點型數(shù)的抽象。l2封裝和信息隱藏封裝和信息隱藏l封裝(封裝(encapsulation)有兩個方面的含義:一是將)有兩個方面的含義:一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個對象中,形成一個有關(guān)的數(shù)據(jù)和操作代碼封裝在一個對象中,形成一個基本單位,各個對象之間相對獨立,互不干擾。二是基本單位,各個對象之間相對獨立,互不干擾。二是將對象中某些部份對外隱藏,即隱藏其內(nèi)部細(xì)節(jié),只將對象中某些部份對外隱藏,即隱藏其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界的消息。留下少量接口,以便與外界聯(lián)系,接收外界的消息。這種對外界隱藏的做法稱為信息隱藏(這種對外界隱藏的做法稱為信息隱藏(i

13、nformation hiding)。信息隱藏還有利于數(shù)據(jù)安全,防止無關(guān)的)。信息隱藏還有利于數(shù)據(jù)安全,防止無關(guān)的人了解和修改數(shù)據(jù)。人了解和修改數(shù)據(jù)。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l封裝把對象的全部屬性和全部行為結(jié)合在一起形成一個不封裝把對象的全部屬性和全部行為結(jié)合在一起形成一個不可分割的獨立單位。而通過信息隱蔽技術(shù),用戶只能見到可分割的獨立單位。而通過信息隱蔽技術(shù),用戶只能見到對象封裝界面上的信息,對象內(nèi)部對用戶是隱蔽的。對象封裝界面上的信息,對象內(nèi)部對用戶是隱蔽的。l例如,一臺電視機就是一個封裝體。從設(shè)計者的角度來講例如,一臺電視機就是一個封裝體。從設(shè)計者的角度來

14、講,不僅需要考慮內(nèi)部的各種元器件,還要考慮主機板、顯,不僅需要考慮內(nèi)部的各種元器件,還要考慮主機板、顯像管等元器件的連接與組裝;從使用者的角度來講,只關(guān)像管等元器件的連接與組裝;從使用者的角度來講,只關(guān)心其型號、顏色、重量等屬性,只關(guān)心電源開關(guān)按鈕、音心其型號、顏色、重量等屬性,只關(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因此,封裝的目的在于將對象的使用者與設(shè)計者分開,使因此,封裝的目的在于將對象的使用者與設(shè)計者分開,使用者不必了解對象行為的具體實現(xiàn),只需要用設(shè)計

15、者提供用者不必了解對象行為的具體實現(xiàn),只需要用設(shè)計者提供的消息接口來訪問該對象。的消息接口來訪問該對象。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l3繼承繼承l(wèi)汽車制造廠要生產(chǎn)新型號的汽車,如果全部從頭開始設(shè)計汽車制造廠要生產(chǎn)新型號的汽車,如果全部從頭開始設(shè)計,將耗費大力的人力、物力和財力。但如果選擇已有的某,將耗費大力的人力、物力和財力。但如果選擇已有的某一型號的汽車為基礎(chǔ),再增加一些新的功能,就能快速研一型號的汽車為基礎(chǔ),再增加一些新的功能,就能快速研發(fā)出新型號的汽車。這是提高生產(chǎn)效率的常用方法。發(fā)出新型號的汽車。這是提

16、高生產(chǎn)效率的常用方法。l如果在軟件開發(fā)中已建立了一個名為如果在軟件開發(fā)中已建立了一個名為A的類,又想建立一的類,又想建立一個名為個名為B的類,而后者與前者內(nèi)容基本相同,只是在前者的類,而后者與前者內(nèi)容基本相同,只是在前者基礎(chǔ)上增加一些新的屬性和行為,顯然不必再從頭設(shè)計一基礎(chǔ)上增加一些新的屬性和行為,顯然不必再從頭設(shè)計一個新類,只需在個新類,只需在A類的基礎(chǔ)上增加一些新的內(nèi)容即可,而類的基礎(chǔ)上增加一些新的內(nèi)容即可,而B類的對象擁有類的對象擁有A類的全部屬性與方法,稱作類的全部屬性與方法,稱作B類對類對A類的繼類的繼承,在承,在B類中不必重新定義已在類中不必重新定義已在A類中定義過的屬性和方法類中

17、定義過的屬性和方法,這種特性在面向?qū)ο笾蟹Q作對象的繼承性。繼承在,這種特性在面向?qū)ο笾蟹Q作對象的繼承性。繼承在C#中中稱為派生,其中,稱為派生,其中,A類稱為基類或父類,類稱為基類或父類,B類稱為派生類或類稱為派生類或子類。子類。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l繼承機制的優(yōu)勢在于降低了軟件開發(fā)的復(fù)雜性和繼承機制的優(yōu)勢在于降低了軟件開發(fā)的復(fù)雜性和費用,使軟件系統(tǒng)易于擴充,大大縮短了軟件開費用,使軟件系統(tǒng)易于擴充,大大縮短了軟件開發(fā)周期,對于大型軟件的開發(fā)具有重要的意義。發(fā)周期,對于大型軟件的開發(fā)具有重要的意義。4.1.4 抽象、封裝、繼承與多態(tài)抽象、封裝、繼承與多態(tài)l4

18、多態(tài)多態(tài)l多態(tài)性(多態(tài)性(polymorphism)是指在基類中定義的屬性或方)是指在基類中定義的屬性或方法被派生類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不法被派生類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。同的行為。其對象對同一消息會做出不同的響應(yīng)其對象對同一消息會做出不同的響應(yīng),如張三,如張三、李四和王五是分別是屬于三個班的三個學(xué)生,在聽到上、李四和王五是分別是屬于三個班的三個學(xué)生,在聽到上課鈴聲后,他們會分別走進(jìn)課鈴聲后,他們會分別走進(jìn)3個不同的教室,同樣,個不同的教室,同樣,“啟動啟動”是所有交通工具都具有的操作,但不同的具體交通工具是所有交通工具都具有的操作,但不同的具體交通

19、工具其其“啟動啟動”操作的具體實現(xiàn)是不同的,如汽車的啟動是操作的具體實現(xiàn)是不同的,如汽車的啟動是“發(fā)動機點火,啟動引擎發(fā)動機點火,啟動引擎”,啟動輪船時要,啟動輪船時要“起錨起錨”,氣球,氣球飛艇啟動是飛艇啟動是“充氣,解纜充氣,解纜”,為了實現(xiàn)多態(tài)性,需要在派,為了實現(xiàn)多態(tài)性,需要在派生類中更改從基類中自動繼承來的數(shù)據(jù)類型或方法。這種生類中更改從基類中自動繼承來的數(shù)據(jù)類型或方法。這種為了替換基類的部分內(nèi)容而在派生類中重新進(jìn)行定義的操為了替換基類的部分內(nèi)容而在派生類中重新進(jìn)行定義的操作,在面向?qū)ο蟮母拍钪蟹Q為覆蓋。這樣一來,不同類的作,在面向?qū)ο蟮母拍钪蟹Q為覆蓋。這樣一來,不同類的對象可以響應(yīng)

20、同名的消息(方法)來完成特定的功能,但對象可以響應(yīng)同名的消息(方法)來完成特定的功能,但其具體的實現(xiàn)方法卻可以不同。其具體的實現(xiàn)方法卻可以不同。4.2 類的定義類的定義l4.2.1 類的聲明和實例化類的聲明和實例化 l4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l4.2.3 類的可訪問性類的可訪問性l4.2.4 值類型與引用類型值類型與引用類型4.2.1 類的聲明和實例化類的聲明和實例化 l1類的聲明類的聲明l類的聲明一般形式如下:類的聲明一般形式如下: 訪問修飾符訪問修飾符 class 類名類名 :基類基類 類的成員類的成員; l其中,訪問修飾符用來限制類的作用范圍或訪問級別,可其中,訪

21、問修飾符用來限制類的作用范圍或訪問級別,可省略;類名是一個合法的省略;類名是一個合法的C#標(biāo)識符,推薦使用標(biāo)識符,推薦使用Pascal命名命名規(guī)范,規(guī)范,Pascal命名規(guī)范要求名稱的每個單詞的命名規(guī)范要求名稱的每個單詞的首字母要大首字母要大寫寫;基類表明所定義的類是一個派生類,可省略;類的成;基類表明所定義的類是一個派生類,可省略;類的成員放在花括號中,構(gòu)成類的主體,用來定義類的屬性和行員放在花括號中,構(gòu)成類的主體,用來定義類的屬性和行為。為。類的成員包括常量、字段、屬性、索引器、方法、事類的成員包括常量、字段、屬性、索引器、方法、事件、構(gòu)造函數(shù)等。件、構(gòu)造函數(shù)等。4.2.1 類的聲明和實例

22、化類的聲明和實例化l2類的實例類的實例l定義類之后,可以用定義的類聲明對象,然后再通過這個定義類之后,可以用定義的類聲明對象,然后再通過這個對象來訪問其數(shù)據(jù)或調(diào)用其方法。對象來訪問其數(shù)據(jù)或調(diào)用其方法。l(1) 對象的聲明與創(chuàng)建。對象的聲明與創(chuàng)建。l聲明對象的格式與聲明基本數(shù)據(jù)類型的格式相同,其語法聲明對象的格式與聲明基本數(shù)據(jù)類型的格式相同,其語法格式為:格式為:l類名類名 對象名對象名l例如:例如:lStudent stu1; /聲明一個聲明一個Student對象對象stu14.2.1 類的聲明和實例化類的聲明和實例化l對象聲明后需要用對象聲明后需要用“new”關(guān)鍵字將對象實例化關(guān)鍵字將對象實

23、例化,這樣才能為,這樣才能為對象在內(nèi)存中分配保存數(shù)據(jù)空間對象在內(nèi)存中分配保存數(shù)據(jù)空間: 對象名對象名=new 類名類名(); 例如:例如: stu1 = new Student(); /為為stu1分配內(nèi)存空間分配內(nèi)存空間l也可以在聲明對象同時實例化對象。語法格式為:也可以在聲明對象同時實例化對象。語法格式為: 類名類名 對象名對象名=new 類名類名(); 例如:例如: Student stu2 = new Student(); /聲明同時創(chuàng)建對象聲明同時創(chuàng)建對象4.2.1 類的聲明和實例化類的聲明和實例化(2) 類成員的訪問。類成員的訪問。類成員有兩種訪問方式:一種是在類的內(nèi)部訪問,另一種

24、是在類成員有兩種訪問方式:一種是在類的內(nèi)部訪問,另一種是在類的外部訪問。類的外部訪問。l在類的內(nèi)部訪問類的成員,表示一個類成員要使用當(dāng)前類在類的內(nèi)部訪問類的成員,表示一個類成員要使用當(dāng)前類中的其他成員,可以直接使用成員名稱,有時為了避免引中的其他成員,可以直接使用成員名稱,有時為了避免引起混淆,也可采用如下形式:起混淆,也可采用如下形式:this.類成員類成員其中,其中,this表示當(dāng)前對象表示當(dāng)前對象,是,是C#的關(guān)鍵字。的關(guān)鍵字。l類外訪問:類外訪問: 對象名對象名.成員名成員名4.2.1 類的聲明和實例化類的聲明和實例化l【實例實例4-1】定義定義Student類并實例化類的對象。類并實

25、例化類的對象。4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l類的成員包括類的類的成員包括類的常量、字段、屬性、索引器、方法、事常量、字段、屬性、索引器、方法、事件、構(gòu)造函數(shù)件、構(gòu)造函數(shù)等,其中,常量、字段和屬性都是與類的數(shù)等,其中,常量、字段和屬性都是與類的數(shù)據(jù)有關(guān)的成員。據(jù)有關(guān)的成員。l1常量常量l常量的值是固定不變的。類的常量成員是一種符號常量,常量的值是固定不變的。類的常量成員是一種符號常量,符號常量是由用戶根據(jù)需要自行創(chuàng)建的常量,在程序設(shè)計符號常量是由用戶根據(jù)需要自行創(chuàng)建的常量,在程序設(shè)計過程中可能需要反復(fù)使用到某個數(shù)據(jù),如圓周率過程中可能需要反復(fù)使用到某個數(shù)據(jù),如圓周率3.141

26、5926,如果在代碼中反復(fù)書寫,不僅麻煩而且容易,如果在代碼中反復(fù)書寫,不僅麻煩而且容易出現(xiàn)書名錯誤,此時,可考慮將其聲明為一個符號常量,出現(xiàn)書名錯誤,此時,可考慮將其聲明為一個符號常量,用戶定義符號常量使用用戶定義符號常量使用const關(guān)鍵字,在定義時,必須指關(guān)鍵字,在定義時,必須指定名稱和值,其一般形式如下:定名稱和值,其一般形式如下:l訪問修飾符訪問修飾符 const 數(shù)據(jù)類型數(shù)據(jù)類型 常量名常量名=常量的值常量的值;4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l2字段字段l字段表示類的成員變量,字段的值代表某個對象的數(shù)據(jù)狀字段表示類的成員變量,字段的值代表某個對象的數(shù)據(jù)狀態(tài)。態(tài)。l

27、訪問修飾符訪問修飾符 數(shù)據(jù)類型數(shù)據(jù)類型 字段名字段名;l其中,訪問修飾符用來控制字段的訪問級別,可省略。例其中,訪問修飾符用來控制字段的訪問級別,可省略。例如:如:lpublic double radius;4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l3屬性屬性 l屬性主要用于描述和維護類對象的狀態(tài)。從客戶端看,對屬性的訪問屬性主要用于描述和維護類對象的狀態(tài)。從客戶端看,對屬性的訪問就好像直接訪問就好像直接訪問public字段成員,但在類內(nèi)部是通過類方法訪問的。字段成員,但在類內(nèi)部是通過類方法訪問的。l定義屬性的一般形式如下:定義屬性的一般形式如下: (自動屬性見自動屬性見MSDN) 訪

28、問修飾符訪問修飾符 數(shù)據(jù)類型數(shù)據(jù)類型 屬性名屬性名 get /獲取屬性的代碼,用獲取屬性的代碼,用return 返回值返回值 set /設(shè)置屬性的代碼,用設(shè)置屬性的代碼,用value賦值賦值 l創(chuàng)建只讀或只寫屬性,即只有創(chuàng)建只讀或只寫屬性,即只有g(shù)et或或set方法方法public class Circle const double PI =3.1415; private double radius; public Cirlce (double r) radius=r; public double Radius get return radius; set radius=value; publ

29、ic double Area() return PI*Radius*Radius; 類聲明類聲明常量常量字段字段構(gòu)造構(gòu)造函數(shù)函數(shù)屬性屬性方法方法4.2.2 類的數(shù)據(jù)成員和屬性類的數(shù)據(jù)成員和屬性l【實例實例4-2】定義類的數(shù)據(jù)成員及屬性。定義類的數(shù)據(jù)成員及屬性。 4.2.3 類的可訪問性類的可訪問性l注意:注意:(1) 命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制。命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制。(2) 如果未指定訪問修飾符,則如果未指定訪問修飾符,則類的成員默認(rèn)為類的成員默認(rèn)為private。 (3) 第一級類型(指不嵌套在其他類型中的類型)的可訪問性只能是第一級

30、類型(指不嵌套在其他類型中的類型)的可訪問性只能是internal或或public,默認(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)等等都是值類型。在定義一個值類型變量后,將

31、直接都是值類型。在定義一個值類型變量后,將直接為該變量分配空間,可以直接賦值和使用。為該變量分配空間,可以直接賦值和使用。 4.2.4 值類型與引用類型值類型與引用類型l引用類型引用類型l與值類型不同,與值類型不同,引用類型變量本身并不包含數(shù)據(jù),只是存引用類型變量本身并不包含數(shù)據(jù),只是存儲對數(shù)據(jù)的引用,數(shù)據(jù)保存在其他位置,數(shù)組、字符串、儲對數(shù)據(jù)的引用,數(shù)據(jù)保存在其他位置,數(shù)組、字符串、類和后面要介紹的接口、委托等都屬于引用類型。類和后面要介紹的接口、委托等都屬于引用類型。引用型引用型變量在定義時并不會分配空間,只是在對其實例化后才真變量在定義時并不會分配空間,只是在對其實例化后才真正的分配存儲

32、空間。正的分配存儲空間。 4.2.4 值類型與引用類型值類型與引用類型l3裝箱和拆箱裝箱和拆箱lC#允許將任何類型的數(shù)據(jù)轉(zhuǎn)換為對象,或者將任何類型的對允許將任何類型的數(shù)據(jù)轉(zhuǎn)換為對象,或者將任何類型的對象轉(zhuǎn)換為與之兼容的數(shù)據(jù)類型。象轉(zhuǎn)換為與之兼容的數(shù)據(jù)類型。lC#把值類型轉(zhuǎn)換為對象的操作稱為裝箱,而把對象轉(zhuǎn)換為兼把值類型轉(zhuǎn)換為對象的操作稱為裝箱,而把對象轉(zhuǎn)換為兼容的值類型的操作稱為拆箱。容的值類型的操作稱為拆箱。C#的這種裝箱與拆箱操作類似的這種裝箱與拆箱操作類似于收發(fā)郵政包裹,發(fā)送包裹之前先裝箱打包,收到包裹后再于收發(fā)郵政包裹,發(fā)送包裹之前先裝箱打包,收到包裹后再拆箱解包。拆箱解包。l裝箱意味

33、著把一個值類型的數(shù)據(jù)轉(zhuǎn)換為一個對象類型的數(shù)據(jù)裝箱意味著把一個值類型的數(shù)據(jù)轉(zhuǎn)換為一個對象類型的數(shù)據(jù),裝箱過程是隱式轉(zhuǎn)換過程,由系統(tǒng)自動完成,裝箱過程是隱式轉(zhuǎn)換過程,由系統(tǒng)自動完成.lC#中中Object類是所有類的最終基類,因此,可以將一個值類類是所有類的最終基類,因此,可以將一個值類型變量直接賦值給型變量直接賦值給Object對象對象 .裝箱和拆箱裝箱和拆箱裝箱裝箱(boxing):值類型轉(zhuǎn)換為引用類型值類型轉(zhuǎn)換為引用類型int i=42;object o=i;棧棧堆堆int iobject o&4242裝箱裝箱int iobject o&4242拆箱拆箱拆箱拆箱(unboxi

34、ng):引用類型轉(zhuǎn)換為值類型引用類型轉(zhuǎn)換為值類型 i= (int) o; /顯式轉(zhuǎn)換顯式轉(zhuǎn)換 4.3 類的方法類的方法l4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用 l4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l4.3.3 方法的重載方法的重載 4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用 l1方法的聲明方法的聲明l聲明方法的一般形式如下:聲明方法的一般形式如下: 訪問修飾符訪問修飾符 返回值類型返回值類型 方法名方法名 (參數(shù)列表參數(shù)列表) 語句語句; return 返回值返回值; 4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用 l(1) 訪問修飾符控制方法的訪問級別,可用于方法的修訪問修飾符控

35、制方法的訪問級別,可用于方法的修飾符包括飾符包括public、protected、private和和internal等;等;訪問修飾符是可選的,默認(rèn)情況下為訪問修飾符是可選的,默認(rèn)情況下為 privatel(2) 方法的返回類型用于指定由該方法計算和返回的值方法的返回類型用于指定由該方法計算和返回的值的類型,可以是任何合法的數(shù)據(jù)類型,包括值類型和的類型,可以是任何合法的數(shù)據(jù)類型,包括值類型和引用類型,如果一個方法不返回一個值,則返回值類引用類型,如果一個方法不返回一個值,則返回值類型使用型使用void關(guān)鍵字來表示;關(guān)鍵字來表示;l(3) 方法名必須符合方法名必須符合C#的命名規(guī)范,與變量名的命

36、名的命名規(guī)范,與變量名的命名規(guī)則相同;規(guī)則相同;4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用l(4) 參數(shù)列表是方法可以接受的輸入數(shù)據(jù),當(dāng)方法不需要參參數(shù)列表是方法可以接受的輸入數(shù)據(jù),當(dāng)方法不需要參數(shù)時,可省略參數(shù)列表,但不能省略圓括號;當(dāng)參數(shù)不止數(shù)時,可省略參數(shù)列表,但不能省略圓括號;當(dāng)參數(shù)不止一個時,需要使用逗號分隔,同時每一個參數(shù)都必須聲明一個時,需要使用逗號分隔,同時每一個參數(shù)都必須聲明數(shù)據(jù)類型,即使這些參數(shù)的數(shù)據(jù)類型相同也不例外;數(shù)據(jù)類型,即使這些參數(shù)的數(shù)據(jù)類型相同也不例外;l(5) 花括號中的內(nèi)容為方法的主體,由若干條語句組成,每花括號中的內(nèi)容為方法的主體,由若干條語句組成,每一條

37、語句都必須使用分號結(jié)尾。當(dāng)方法結(jié)束時如果需要返一條語句都必須使用分號結(jié)尾。當(dāng)方法結(jié)束時如果需要返回操作結(jié)果,則使用回操作結(jié)果,則使用return語句返回,并且返回的值的類語句返回,并且返回的值的類型要與返回值的類型相匹配。如果使用型要與返回值的類型相匹配。如果使用void標(biāo)記方法為無標(biāo)記方法為無返回值的方法,可省略返回值的方法,可省略return語句。語句。4.3.1 方法的聲明與調(diào)用方法的聲明與調(diào)用l2方法的調(diào)用方法的調(diào)用l一個方法一旦在某個類中聲明,就可由其他方法調(diào)用,調(diào)一個方法一旦在某個類中聲明,就可由其他方法調(diào)用,調(diào)用者既可以是同一個類中的方法,也可以是其他類中的方用者既可以是同一個類

38、中的方法,也可以是其他類中的方法。如果調(diào)用者是同一個類的方法,則可以直接調(diào)用,如法。如果調(diào)用者是同一個類的方法,則可以直接調(diào)用,如果調(diào)用者是其他類中的方法,則需要通過類的實例來引用果調(diào)用者是其他類中的方法,則需要通過類的實例來引用,但靜態(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)用該方法,需要通過類聲明的對象調(diào)用該方法,其格式為:的對象調(diào)用該

39、方法,其格式為: 對象名對象名.方法名方法名(參數(shù)列表參數(shù)列表)4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l在聲明方法時,所定義的參數(shù)是形式參數(shù)(簡稱形參),在聲明方法時,所定義的參數(shù)是形式參數(shù)(簡稱形參),這些參數(shù)的值由調(diào)用方負(fù)責(zé)為其傳遞,調(diào)用方傳遞的是實這些參數(shù)的值由調(diào)用方負(fù)責(zé)為其傳遞,調(diào)用方傳遞的是實際數(shù)據(jù),稱為實際參數(shù)(簡稱實參),調(diào)用方必須嚴(yán)格按際數(shù)據(jù),稱為實際參數(shù)(簡稱實參),調(diào)用方必須嚴(yán)格按照被調(diào)用的方法所定義的參數(shù)類型和順序指定實參。在調(diào)照被調(diào)用的方法所定義的參數(shù)類型和順序指定實參。在調(diào)用方法時,參數(shù)傳遞就是將實參傳遞給形參的過程。用方法時,參數(shù)傳遞就是將實參傳遞給形參的過程。l

40、方法的參數(shù)傳遞按性質(zhì)可分為方法的參數(shù)傳遞按性質(zhì)可分為: 按值傳遞與按引用傳遞按值傳遞與按引用傳遞。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l1按值傳參按值傳參l按值傳參時,把實參變量的值賦給相對應(yīng)的形參變量,即按值傳參時,把實參變量的值賦給相對應(yīng)的形參變量,即被調(diào)用的方法所接收到的只是實參數(shù)據(jù)值的一個副本。當(dāng)被調(diào)用的方法所接收到的只是實參數(shù)據(jù)值的一個副本。當(dāng)在方法內(nèi)部更改了形參變量的數(shù)據(jù)值時,不會影響實參變在方法內(nèi)部更改了形參變量的數(shù)據(jù)值時,不會影響實參變量的值,即實參變量和形參變量是兩個不相同的變量,他量的值,即實參變量和形參變量是兩個不相同的變量,他們具有各自的內(nèi)存地址和數(shù)據(jù)值。因此,們具

41、有各自的內(nèi)存地址和數(shù)據(jù)值。因此,實參變量的值傳實參變量的值傳遞給形參變量時是一種單向值傳遞遞給形參變量時是一種單向值傳遞。l值類型的參數(shù)在傳遞時默認(rèn)為按值傳參值類型的參數(shù)在傳遞時默認(rèn)為按值傳參。string和和object雖然是引用型數(shù)據(jù),但從表現(xiàn)形式來看,其具有按值傳參雖然是引用型數(shù)據(jù),但從表現(xiàn)形式來看,其具有按值傳參的效果。的效果。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實例實例4-3】用值傳參進(jìn)行參數(shù)值交換用值傳參進(jìn)行參數(shù)值交換 4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l2按引用傳參按引用傳參l調(diào)用方向方法傳遞引用型參數(shù)時,調(diào)用方將把實參變量的引用賦調(diào)用方向方法傳遞引用型參數(shù)時,調(diào)用

42、方將把實參變量的引用賦給相對應(yīng)的形參變量。實參變量的引用代表數(shù)據(jù)值的內(nèi)存地址,給相對應(yīng)的形參變量。實參變量的引用代表數(shù)據(jù)值的內(nèi)存地址,因此,因此,形參變量和實參變量將指向同一個引用。形參變量和實參變量將指向同一個引用。如果在方法內(nèi)部如果在方法內(nèi)部更改了形參變量所引用的數(shù)據(jù)值,則同時也修改了實參變量所引更改了形參變量所引用的數(shù)據(jù)值,則同時也修改了實參變量所引用的數(shù)據(jù)值。用的數(shù)據(jù)值。l當(dāng)值類型和當(dāng)值類型和string類型參數(shù)要按引用方式傳參時,可以通過類型參數(shù)要按引用方式傳參時,可以通過ref關(guān)關(guān)鍵字來聲明引用參數(shù),鍵字來聲明引用參數(shù),無論是形參還是實參,只要希望傳遞數(shù)據(jù)無論是形參還是實參,只要希

43、望傳遞數(shù)據(jù)的引用,就必須添加的引用,就必須添加ref關(guān)鍵字。關(guān)鍵字。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實例實例4-4】用引用傳參進(jìn)行參數(shù)值交換。用引用傳參進(jìn)行參數(shù)值交換。 (1) 將將【實例實例4-3】Swap方法聲明改為引用型參數(shù):方法聲明改為引用型參數(shù): public string Swap(ref int x,ref int y) (2) 將將【實例實例4-3】Swap方法調(diào)用改為引用型傳參:方法調(diào)用改為引用型傳參: lblShow.Text = s.Swap(ref a, ref b);自學(xué):通過自學(xué):通過MSDN求證:求證:string作為引用型,需用作為引用型,需用ref

44、聲聲明引用傳遞,否則按值傳遞。明引用傳遞,否則按值傳遞。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞3輸出參數(shù)輸出參數(shù)lref修飾的引用參數(shù)在傳參前要求先初始化實參。但有時候修飾的引用參數(shù)在傳參前要求先初始化實參。但有時候?qū)崊?yīng)由方法調(diào)用結(jié)束后返回,所在在傳參前確定其值是實參應(yīng)由方法調(diào)用結(jié)束后返回,所在在傳參前確定其值是沒有意義的。這時可以使用輸出參數(shù),沒有意義的。這時可以使用輸出參數(shù),l輸出參數(shù)輸出參數(shù)不需要對實參進(jìn)行初始化,它不需要對實參進(jìn)行初始化,它專門用于把方法中專門用于把方法中的數(shù)據(jù)通過形參返回給實參的數(shù)據(jù)通過形參返回給實參,但,但不會將實參的值傳遞給形不會將實參的值傳遞給形參參。一個方

45、法中可允許有多個輸出參數(shù)。一個方法中可允許有多個輸出參數(shù)。lC#通過通過out關(guān)鍵字來聲明輸出參數(shù),無論是形參還是實參關(guān)鍵字來聲明輸出參數(shù),無論是形參還是實參,只要是輸出參數(shù),都必須添加,只要是輸出參數(shù),都必須添加out關(guān)鍵字。關(guān)鍵字。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實例實例4-5】用輸出參數(shù)求文件路徑中的目錄和文用輸出參數(shù)求文件路徑中的目錄和文件名。件名。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞4引用類型數(shù)據(jù)的傳參引用類型數(shù)據(jù)的傳參l引用類型參數(shù)總是按引用傳遞的,引用類型參數(shù)總是按引用傳遞的,所以引用類型參數(shù)傳遞所以引用類型參數(shù)傳遞不需要使用不需要使用ref或或out關(guān)鍵字關(guān)鍵字

46、(string除外除外),引用類型參數(shù)的,引用類型參數(shù)的傳遞,實際上是將實參對數(shù)據(jù)的引用復(fù)制給了形參。所以傳遞,實際上是將實參對數(shù)據(jù)的引用復(fù)制給了形參。所以形參與實參共同指向同一個內(nèi)存區(qū)域。形參與實參共同指向同一個內(nèi)存區(qū)域。l【實例實例4-6】用引用類型數(shù)據(jù)的傳參修改對象值。用引用類型數(shù)據(jù)的傳參修改對象值。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞5數(shù)組型參數(shù)數(shù)組型參數(shù)l數(shù)組也是引用類型數(shù)據(jù),把數(shù)組作為參數(shù)傳遞時,也是數(shù)組也是引用類型數(shù)據(jù),把數(shù)組作為參數(shù)傳遞時,也是引用傳參。引用傳參。l數(shù)組作為參數(shù),有兩種使用形式:數(shù)組作為參數(shù),有兩種使用形式:l一是在形參數(shù)組前不添加一是在形參數(shù)組前不添加pa

47、rams修飾符,所對應(yīng)的實修飾符,所對應(yīng)的實參必須是一個數(shù)組名;參必須是一個數(shù)組名;l二是在形參數(shù)組前添加二是在形參數(shù)組前添加params修飾符。所對應(yīng)的實參修飾符。所對應(yīng)的實參可以是數(shù)組名,也可以是數(shù)組元素值的列表,此時,系可以是數(shù)組名,也可以是數(shù)組元素值的列表,此時,系統(tǒng)將自動把各種元素值組織到一個數(shù)組中。統(tǒng)將自動把各種元素值組織到一個數(shù)組中。l無論采用哪一種形式,形參數(shù)組都不能定義數(shù)組的長度無論采用哪一種形式,形參數(shù)組都不能定義數(shù)組的長度。4.3.2 方法的參數(shù)傳遞方法的參數(shù)傳遞l【實例實例4-7】使用不添加使用不添加params和添加和添加params修修改符的數(shù)組傳參求數(shù)組中的最大值

48、。改符的數(shù)組傳參求數(shù)組中的最大值。4.3.3 方法的重載方法的重載l在編程時,一般是一個方法對應(yīng)一種功能,但有時需要實在編程時,一般是一個方法對應(yīng)一種功能,但有時需要實現(xiàn)同一類功能,只是有些細(xì)節(jié)不同?,F(xiàn)同一類功能,只是有些細(xì)節(jié)不同。例:例: public int MaxIntTwo(int a, int b) public double MaxDouble(double a, double b) public int MaxIntThree(int a, int b, int c) public int MaxArray(int a) l允許用同一方法名定義多個方法,這些方法的參數(shù)個數(shù)或允許用

49、同一方法名定義多個方法,這些方法的參數(shù)個數(shù)或參數(shù)類型不同,這就是方法的重載參數(shù)類型不同,這就是方法的重載(function overloading)。4.3.3 方法的重載方法的重載l方法重載有兩點要求:方法重載有兩點要求: (1) 重載的方法重載的方法名稱必須相同名稱必須相同; (2) 重載方法的重載方法的形參個數(shù)或類型必須不同形參個數(shù)或類型必須不同,否則將出現(xiàn)一個,否則將出現(xiàn)一個“已定義了一個具有相同參數(shù)類型的成員已定義了一個具有相同參數(shù)類型的成員”l如果要完成上例相似功能的如果要完成上例相似功能的4個方法,重載方法如下:個方法,重載方法如下: public int Max(int a,

50、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)用具有重載的方法時,系統(tǒng)會根據(jù)參數(shù)的類型或個數(shù)在調(diào)用具有重載的方法時,系統(tǒng)會根據(jù)參數(shù)的類型或個數(shù)確定最匹配的方法被調(diào)用。確定最匹配的方法被調(diào)用。4.3.3 方法的重載方法的重載l【實例實例4-8】利用方法重載實現(xiàn)利用方法重載實現(xiàn)2個整數(shù),個整數(shù),2個雙精個雙精度數(shù)、度數(shù)、3個整數(shù)中求最大值。個整數(shù)中求最大值。4.4 構(gòu)造函數(shù)構(gòu)造函數(shù)l4.4.1 構(gòu)造函數(shù)的聲明和調(diào)用構(gòu)造函數(shù)的聲明和調(diào)用

51、 l4.4.2 構(gòu)造函數(shù)的重載構(gòu)造函數(shù)的重載 l4.4.3 構(gòu)造函數(shù)與只讀字段構(gòu)造函數(shù)與只讀字段 l4.4.4 對象的生命周期和析構(gòu)函數(shù)對象的生命周期和析構(gòu)函數(shù)4.4.1 構(gòu)造函數(shù)的聲明和調(diào)用構(gòu)造函數(shù)的聲明和調(diào)用 l構(gòu)造函數(shù)是類中的一種特殊的方法,其一般形式如下:構(gòu)造函數(shù)是類中的一種特殊的方法,其一般形式如下: public 構(gòu)造函數(shù)名構(gòu)造函數(shù)名(參數(shù)列表參數(shù)列表) 語句語句; l要求:要求: 構(gòu)造函數(shù)的名稱必須和類名相同;且構(gòu)造函數(shù)不允許有返構(gòu)造函數(shù)的名稱必須和類名相同;且構(gòu)造函數(shù)不允許有返回類型(包括回類型(包括void類型)。類型)。l不包含任何參數(shù)和語句的構(gòu)造函數(shù)稱為不包含任何參數(shù)和語

52、句的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)默認(rèn)構(gòu)造函數(shù)。如。如果沒有定義構(gòu)造函數(shù),編譯器將自動生成默認(rèn)構(gòu)造函數(shù)由果沒有定義構(gòu)造函數(shù),編譯器將自動生成默認(rèn)構(gòu)造函數(shù)由,默認(rèn)構(gòu)造函數(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òu)造函數(shù)重載與方法一樣可以重載。在一個類中,可以定義多個構(gòu)造函數(shù),以便對對象提供不同的初始化方法,以滿足創(chuàng)建個構(gòu)造函數(shù),以便對對象提供不同的初始化方法,以滿足創(chuàng)建對象時的不同需要。對象時的不同需要。默認(rèn)構(gòu)造函數(shù):對不同數(shù)據(jù)類型初始化為相應(yīng)的默認(rèn)構(gòu)造函數(shù):對不同數(shù)

53、據(jù)類型初始化為相應(yīng)的默認(rèn)值:默認(rèn)值: 參見參見MSDN。4.4.2 構(gòu)造函數(shù)的重載構(gòu)造函數(shù)的重載l【實例實例4-9】利用構(gòu)造函數(shù)重載實現(xiàn)不同對象實例利用構(gòu)造函數(shù)重載實現(xiàn)不同對象實例化?;?。4.4.3 構(gòu)造函數(shù)與只讀字段構(gòu)造函數(shù)與只讀字段l只讀字段:通過關(guān)鍵字只讀字段:通過關(guān)鍵字readonly設(shè)置設(shè)置l只有在聲明時為它賦值,或者在對象初始化時賦只有在聲明時為它賦值,或者在對象初始化時賦值。值。l在聲明時為只讀字段賦值與聲明常量沒有區(qū)別,在聲明時為只讀字段賦值與聲明常量沒有區(qū)別,在對象初始化時為只讀字段賦值需要使用構(gòu)造函在對象初始化時為只讀字段賦值需要使用構(gòu)造函數(shù)實現(xiàn)。數(shù)實現(xiàn)。4.4.3 構(gòu)造函數(shù)與只讀字段構(gòu)造函數(shù)與只讀字段l【實例實例4-10】公園門票調(diào)價問題公園門票調(diào)價問題。4.4.4 對象的生命周期和析構(gòu)函數(shù)對象的生命周期和析構(gòu)函數(shù) lC#程序中,一個對象是類的一個實例,實際上就是一個引程序中,一個對象是類的一個實例,實際上就是一個引用型的變量,在程序運行過程中,它需要占用一定的內(nèi)存用型的變量,在程序運行過程中,它需要占用一定的內(nèi)存空間,空間,.NET 的公共語言運行時負(fù)責(zé)為其分配內(nèi)存。當(dāng)程序的公共語言運行時負(fù)責(zé)為其分配內(nèi)存。當(dāng)程序運

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論