




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、2022-3-81項目一項目一: 類的定義及屬性的定義和使用類的定義及屬性的定義和使用項目二項目二: 時間顯示窗體時間顯示窗體,類的字段類的字段構造函構造函數數只讀屬性的用法只讀屬性的用法 .第四章第四章 面向對象程序設計入門面向對象程序設計入門1. 總體要求總體要求l理解面向對象的基本概念,正確區分類和對象,對象的聲明理解面向對象的基本概念,正確區分類和對象,對象的聲明和對象的創建。和對象的創建。l掌握類的定義與使用方法,正確定義類的數據成員、屬性和掌握類的定義與使用方法,正確定義類的數據成員、屬性和方法。方法。l理解類的可訪問性、正確使用訪問修飾符控制對類成員的訪理解類的可訪問性、正確使用
2、訪問修飾符控制對類成員的訪問。問。l掌握類的方法的定義、調用與重載,理解方法的參數傳遞的掌握類的方法的定義、調用與重載,理解方法的參數傳遞的工作機制。工作機制。l理解值類型和引用類型的區別。理解值類型和引用類型的區別。l理解構造函數與析構函數的作用,掌握其使用方法。理解構造函數與析構函數的作用,掌握其使用方法。l方法的重載和參數傳遞方法的重載和參數傳遞2. 學習重點學習重點lC#中類的定義、類的數據成員、屬性和方法中類的定義、類的數據成員、屬性和方法l類的構造函數類的構造函數l方法的重載和參數傳遞方法的重載和參數傳遞第四章第四章 面向對象程序設計入門面向對象程序設計入門 3. 學習學習難難點點
3、l類和對象的關系類和對象的關系l方法的重載和參數傳遞方法的重載和參數傳遞l值類型和引用類型及對象的生命周期值類型和引用類型及對象的生命周期第四章第四章 面向對象程序設計入門面向對象程序設計入門面向對象的基本概念面向對象的基本概念 (*)類的定義類的定義類的方法類的方法構造函數構造函數(*)2022-3-87l4.1.1 對象對象l4.1.2 事件與方法事件與方法l4.1.3 類與對象類與對象l4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態 2022-3-88對象對象l客觀世界中任何一個事物都可以看成一個對象客觀世界中任何一個事物都可以看成一個對象(object),對象可以是自然物體(
4、如汽車、房屋、狗),也可以是社對象可以是自然物體(如汽車、房屋、狗),也可以是社會生活中一種邏輯結構(如班級、部門、組織),甚至一會生活中一種邏輯結構(如班級、部門、組織),甚至一篇文章、一個圖形、一項計劃等都可以視作對象。對象是篇文章、一個圖形、一項計劃等都可以視作對象。對象是構成系統的基本單位,在實際社會生活中,人們都是在不構成系統的基本單位,在實際社會生活中,人們都是在不同的對象中活動的。同的對象中活動的。 l任何一個對象都應當具有這兩個要素,任何一個對象都應當具有這兩個要素,即屬性即屬性(attribute)和行為和行為(behavior),一個對象往往由一組屬性和一組行為,一個對象往
5、往由一組屬性和一組行為構成,一輛汽車是一個對象,它的屬性是生產廠家、品牌、構成,一輛汽車是一個對象,它的屬性是生產廠家、品牌、型號、顏色、價格等,它是行為是它的功能,如發動、停型號、顏色、價格等,它是行為是它的功能,如發動、停止、加速等,一般來說,凡是具備屬性和行為這兩個要素止、加速等,一般來說,凡是具備屬性和行為這兩個要素的,都可以作為對象,的,都可以作為對象,對象對象l對象是問題域中某些事物的一個抽象,反映事物對象是問題域中某些事物的一個抽象,反映事物在系統中需要保存的必要信息和發揮的作用,是在系統中需要保存的必要信息和發揮的作用,是包含一些特殊屬性(數據)和服務(行為方法)包含一些特殊屬
6、性(數據)和服務(行為方法)的封裝實體。具體來說,他應有唯一的名稱,有的封裝實體。具體來說,他應有唯一的名稱,有一系列狀態(表示為數據),有表示對象行為的一系列狀態(表示為數據),有表示對象行為的一系列行為(方法),簡言之:一系列行為(方法),簡言之:l對象對象 = 屬性屬性 + 行為(方法、操作)行為(方法、操作)4.1.2 事件與方法事件與方法l事件事件(Event)又稱為)又稱為消息消息(Message),表示向對),表示向對象發出的服務請求。方法(象發出的服務請求。方法(Method)表示對象能完)表示對象能完成的服務或執行的操作功能。成的服務或執行的操作功能。l在一個系統中的多個對象
7、之間通過一定的渠道相互聯在一個系統中的多個對象之間通過一定的渠道相互聯系,要使某一個對象實現某一種行為或操作,應當向系,要使某一個對象實現某一種行為或操作,應當向他傳送相應的消息。例如想讓汽車行駛,必須由人去他傳送相應的消息。例如想讓汽車行駛,必須由人去踩油門,向汽車發出相應的信號。踩油門,向汽車發出相應的信號。對象之間就是這樣對象之間就是這樣通過發送和接收消息互相聯系的。通過發送和接收消息互相聯系的。l在面向對象的概念中,一個對象可以有多個方法,提供多種服在面向對象的概念中,一個對象可以有多個方法,提供多種服務,完成多種操作功能。但這些方法只有在另外一個對象向他務,完成多種操作功能。但這些方
8、法只有在另外一個對象向他發出請求之后(發生事件)才會被執行。發出請求之后(發生事件)才會被執行。 4.1.3 類與對象類與對象l普通邏輯意義上的類是現實世界中各種實體的抽普通邏輯意義上的類是現實世界中各種實體的抽象概念,而對象是現實生活中的一個個實體,例象概念,而對象是現實生活中的一個個實體,例如,在現實世界中大量具體一輛輛汽車、摩托車如,在現實世界中大量具體一輛輛汽車、摩托車、自行車等實體是對象,而交通工具則是這些對、自行車等實體是對象,而交通工具則是這些對象的抽象,交通工具就是一個類。象的抽象,交通工具就是一個類。l在面向對象的概念中,類(在面向對象的概念中,類(Class)表示具有相同)
9、表示具有相同屬性和行為的一組對象的集合,為該類的所有對屬性和行為的一組對象的集合,為該類的所有對象提供統一的抽象描述。象提供統一的抽象描述。 l類是對相似對象的抽象,而對象是該類的一個特類是對相似對象的抽象,而對象是該類的一個特例,類與對象的關系是抽象與具體的關系。例,類與對象的關系是抽象與具體的關系。 4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態l面向對象的最基本的特征是抽象性、封裝性、繼承性和多面向對象的最基本的特征是抽象性、封裝性、繼承性和多態性。態性。l1抽象抽象l抽象(抽象(abstraction)是處理事物復雜性的方法,只關注與)是處理事物復雜性的方法,只關注與當前目標
10、有關的方面,而忽略與當前目標無關的那些方面當前目標有關的方面,而忽略與當前目標無關的那些方面,例如在學生成績管理中,張三、李四、王五作為學生,例如在學生成績管理中,張三、李四、王五作為學生,我們只關心他們和成績管理有關的屬性和行為,如學號、我們只關心他們和成績管理有關的屬性和行為,如學號、姓名、成績、專業等特性。抽象的過程是將有關事物的共姓名、成績、專業等特性。抽象的過程是將有關事物的共性歸納、集中的過程,例如凡是有輪子、能滾動并前進的性歸納、集中的過程,例如凡是有輪子、能滾動并前進的陸地交通工具統稱為陸地交通工具統稱為“車子車子”,把其中用汽油發動機驅動,把其中用汽油發動機驅動的抽象為的抽象
11、為“汽車汽車”,把用馬拉的抽象為,把用馬拉的抽象為“馬車馬車”。4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態l抽象能表示同一類事物的本質抽象能表示同一類事物的本質,如果你會使用自己家里的電,如果你會使用自己家里的電視機,在別人家里看到即便是不同的牌子的電視機,你也能視機,在別人家里看到即便是不同的牌子的電視機,你也能對它進行操作。因這它具有所有電視機所共有的特征對它進行操作。因這它具有所有電視機所共有的特征.lC#中的數據類型就是對一系列具體的數的抽象中的數據類型就是對一系列具體的數的抽象,例如:,例如:int是是對所有整數的抽象,對所有整數的抽象,double是對所有雙精度浮點型
12、數的抽象是對所有雙精度浮點型數的抽象。l2封裝和信息隱藏封裝和信息隱藏l封裝(封裝(encapsulation)有兩個方面的含義:一是將)有兩個方面的含義:一是將有關的數據和操作代碼封裝在一個對象中,形成一個有關的數據和操作代碼封裝在一個對象中,形成一個基本單位,各個對象之間相對獨立,互不干擾。二是基本單位,各個對象之間相對獨立,互不干擾。二是將對象中某些部份對外隱藏,即隱藏其內部細節,只將對象中某些部份對外隱藏,即隱藏其內部細節,只留下少量接口,以便與外界聯系,接收外界的消息。留下少量接口,以便與外界聯系,接收外界的消息。這種對外界隱藏的做法稱為信息隱藏(這種對外界隱藏的做法稱為信息隱藏(i
13、nformation hiding)。信息隱藏還有利于數據安全,防止無關的)。信息隱藏還有利于數據安全,防止無關的人了解和修改數據。人了解和修改數據。4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態l封裝把對象的全部屬性和全部行為結合在一起形成一個不封裝把對象的全部屬性和全部行為結合在一起形成一個不可分割的獨立單位。而通過信息隱蔽技術,用戶只能見到可分割的獨立單位。而通過信息隱蔽技術,用戶只能見到對象封裝界面上的信息,對象內部對用戶是隱蔽的。對象封裝界面上的信息,對象內部對用戶是隱蔽的。l例如,一臺電視機就是一個封裝體。從設計者的角度來講例如,一臺電視機就是一個封裝體。從設計者的角度來
14、講,不僅需要考慮內部的各種元器件,還要考慮主機板、顯,不僅需要考慮內部的各種元器件,還要考慮主機板、顯像管等元器件的連接與組裝;從使用者的角度來講,只關像管等元器件的連接與組裝;從使用者的角度來講,只關心其型號、顏色、重量等屬性,只關心電源開關按鈕、音心其型號、顏色、重量等屬性,只關心電源開關按鈕、音量開關、調頻按鈕、視頻輸入輸出接口等用起來是否方便量開關、調頻按鈕、視頻輸入輸出接口等用起來是否方便,根本不用關心其內部構造。,根本不用關心其內部構造。l因此,封裝的目的在于將對象的使用者與設計者分開,使因此,封裝的目的在于將對象的使用者與設計者分開,使用者不必了解對象行為的具體實現,只需要用設計
15、者提供用者不必了解對象行為的具體實現,只需要用設計者提供的消息接口來訪問該對象。的消息接口來訪問該對象。4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態l3繼承繼承l汽車制造廠要生產新型號的汽車,如果全部從頭開始設計汽車制造廠要生產新型號的汽車,如果全部從頭開始設計,將耗費大力的人力、物力和財力。但如果選擇已有的某,將耗費大力的人力、物力和財力。但如果選擇已有的某一型號的汽車為基礎,再增加一些新的功能,就能快速研一型號的汽車為基礎,再增加一些新的功能,就能快速研發出新型號的汽車。這是提高生產效率的常用方法。發出新型號的汽車。這是提
16、高生產效率的常用方法。l如果在軟件開發中已建立了一個名為如果在軟件開發中已建立了一個名為A的類,又想建立一的類,又想建立一個名為個名為B的類,而后者與前者內容基本相同,只是在前者的類,而后者與前者內容基本相同,只是在前者基礎上增加一些新的屬性和行為,顯然不必再從頭設計一基礎上增加一些新的屬性和行為,顯然不必再從頭設計一個新類,只需在個新類,只需在A類的基礎上增加一些新的內容即可,而類的基礎上增加一些新的內容即可,而B類的對象擁有類的對象擁有A類的全部屬性與方法,稱作類的全部屬性與方法,稱作B類對類對A類的繼類的繼承,在承,在B類中不必重新定義已在類中不必重新定義已在A類中定義過的屬性和方法類中
17、定義過的屬性和方法,這種特性在面向對象中稱作對象的繼承性。繼承在,這種特性在面向對象中稱作對象的繼承性。繼承在C#中中稱為派生,其中,稱為派生,其中,A類稱為基類或父類,類稱為基類或父類,B類稱為派生類或類稱為派生類或子類。子類。4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態l繼承機制的優勢在于降低了軟件開發的復雜性和繼承機制的優勢在于降低了軟件開發的復雜性和費用,使軟件系統易于擴充,大大縮短了軟件開費用,使軟件系統易于擴充,大大縮短了軟件開發周期,對于大型軟件的開發具有重要的意義。發周期,對于大型軟件的開發具有重要的意義。4.1.4 抽象、封裝、繼承與多態抽象、封裝、繼承與多態l4
18、多態多態l多態性(多態性(polymorphism)是指在基類中定義的屬性或方)是指在基類中定義的屬性或方法被派生類繼承后,可以具有不同的數據類型或表現出不法被派生類繼承后,可以具有不同的數據類型或表現出不同的行為。同的行為。其對象對同一消息會做出不同的響應其對象對同一消息會做出不同的響應,如張三,如張三、李四和王五是分別是屬于三個班的三個學生,在聽到上、李四和王五是分別是屬于三個班的三個學生,在聽到上課鈴聲后,他們會分別走進課鈴聲后,他們會分別走進3個不同的教室,同樣,個不同的教室,同樣,“啟動啟動”是所有交通工具都具有的操作,但不同的具體交通工具是所有交通工具都具有的操作,但不同的具體交通
19、工具其其“啟動啟動”操作的具體實現是不同的,如汽車的啟動是操作的具體實現是不同的,如汽車的啟動是“發動機點火,啟動引擎發動機點火,啟動引擎”,啟動輪船時要,啟動輪船時要“起錨起錨”,氣球,氣球飛艇啟動是飛艇啟動是“充氣,解纜充氣,解纜”,為了實現多態性,需要在派,為了實現多態性,需要在派生類中更改從基類中自動繼承來的數據類型或方法。這種生類中更改從基類中自動繼承來的數據類型或方法。這種為了替換基類的部分內容而在派生類中重新進行定義的操為了替換基類的部分內容而在派生類中重新進行定義的操作,在面向對象的概念中稱為覆蓋。這樣一來,不同類的作,在面向對象的概念中稱為覆蓋。這樣一來,不同類的對象可以響應
20、同名的消息(方法)來完成特定的功能,但對象可以響應同名的消息(方法)來完成特定的功能,但其具體的實現方法卻可以不同。其具體的實現方法卻可以不同。4.2 類的定義類的定義l4.2.1 類的聲明和實例化類的聲明和實例化 l4.2.2 類的數據成員和屬性類的數據成員和屬性l4.2.3 類的可訪問性類的可訪問性l4.2.4 值類型與引用類型值類型與引用類型4.2.1 類的聲明和實例化類的聲明和實例化 l1類的聲明類的聲明l類的聲明一般形式如下:類的聲明一般形式如下: 訪問修飾符訪問修飾符 class 類名類名 :基類基類 類的成員類的成員; l其中,訪問修飾符用來限制類的作用范圍或訪問級別,可其中,訪
21、問修飾符用來限制類的作用范圍或訪問級別,可省略;類名是一個合法的省略;類名是一個合法的C#標識符,推薦使用標識符,推薦使用Pascal命名命名規范,規范,Pascal命名規范要求名稱的每個單詞的命名規范要求名稱的每個單詞的首字母要大首字母要大寫寫;基類表明所定義的類是一個派生類,可省略;類的成;基類表明所定義的類是一個派生類,可省略;類的成員放在花括號中,構成類的主體,用來定義類的屬性和行員放在花括號中,構成類的主體,用來定義類的屬性和行為。為。類的成員包括常量、字段、屬性、索引器、方法、事類的成員包括常量、字段、屬性、索引器、方法、事件、構造函數等。件、構造函數等。4.2.1 類的聲明和實例
22、化類的聲明和實例化l2類的實例類的實例l定義類之后,可以用定義的類聲明對象,然后再通過這個定義類之后,可以用定義的類聲明對象,然后再通過這個對象來訪問其數據或調用其方法。對象來訪問其數據或調用其方法。l(1) 對象的聲明與創建。對象的聲明與創建。l聲明對象的格式與聲明基本數據類型的格式相同,其語法聲明對象的格式與聲明基本數據類型的格式相同,其語法格式為:格式為:l類名類名 對象名對象名l例如:例如:lStudent stu1; /聲明一個聲明一個Student對象對象stu14.2.1 類的聲明和實例化類的聲明和實例化l對象聲明后需要用對象聲明后需要用“new”關鍵字將對象實例化關鍵字將對象實
23、例化,這樣才能為,這樣才能為對象在內存中分配保存數據空間對象在內存中分配保存數據空間: 對象名對象名=new 類名類名(); 例如:例如: stu1 = new Student(); /為為stu1分配內存空間分配內存空間l也可以在聲明對象同時實例化對象。語法格式為:也可以在聲明對象同時實例化對象。語法格式為: 類名類名 對象名對象名=new 類名類名(); 例如:例如: Student stu2 = new Student(); /聲明同時創建對象聲明同時創建對象4.2.1 類的聲明和實例化類的聲明和實例化(2) 類成員的訪問。類成員的訪問。類成員有兩種訪問方式:一種是在類的內部訪問,另一種
24、是在類成員有兩種訪問方式:一種是在類的內部訪問,另一種是在類的外部訪問。類的外部訪問。l在類的內部訪問類的成員,表示一個類成員要使用當前類在類的內部訪問類的成員,表示一個類成員要使用當前類中的其他成員,可以直接使用成員名稱,有時為了避免引中的其他成員,可以直接使用成員名稱,有時為了避免引起混淆,也可采用如下形式:起混淆,也可采用如下形式:this.類成員類成員其中,其中,this表示當前對象表示當前對象,是,是C#的關鍵字。的關鍵字。l類外訪問:類外訪問: 對象名對象名.成員名成員名4.2.1 類的聲明和實例化類的聲明和實例化l【實例實例4-1】定義定義Student類并實例化類的對象。類并實
25、例化類的對象。4.2.2 類的數據成員和屬性類的數據成員和屬性l類的成員包括類的類的成員包括類的常量、字段、屬性、索引器、方法、事常量、字段、屬性、索引器、方法、事件、構造函數件、構造函數等,其中,常量、字段和屬性都是與類的數等,其中,常量、字段和屬性都是與類的數據有關的成員。據有關的成員。l1常量常量l常量的值是固定不變的。類的常量成員是一種符號常量,常量的值是固定不變的。類的常量成員是一種符號常量,符號常量是由用戶根據需要自行創建的常量,在程序設計符號常量是由用戶根據需要自行創建的常量,在程序設計過程中可能需要反復使用到某個數據,如圓周率過程中可能需要反復使用到某個數據,如圓周率3.141
26、5926,如果在代碼中反復書寫,不僅麻煩而且容易,如果在代碼中反復書寫,不僅麻煩而且容易出現書名錯誤,此時,可考慮將其聲明為一個符號常量,出現書名錯誤,此時,可考慮將其聲明為一個符號常量,用戶定義符號常量使用用戶定義符號常量使用const關鍵字,在定義時,必須指關鍵字,在定義時,必須指定名稱和值,其一般形式如下:定名稱和值,其一般形式如下:l訪問修飾符訪問修飾符 const 數據類型數據類型 常量名常量名=常量的值常量的值;4.2.2 類的數據成員和屬性類的數據成員和屬性l2字段字段l字段表示類的成員變量,字段的值代表某個對象的數據狀字段表示類的成員變量,字段的值代表某個對象的數據狀態。態。l
27、訪問修飾符訪問修飾符 數據類型數據類型 字段名字段名;l其中,訪問修飾符用來控制字段的訪問級別,可省略。例其中,訪問修飾符用來控制字段的訪問級別,可省略。例如:如:lpublic double radius;4.2.2 類的數據成員和屬性類的數據成員和屬性l3屬性屬性 l屬性主要用于描述和維護類對象的狀態。從客戶端看,對屬性的訪問屬性主要用于描述和維護類對象的狀態。從客戶端看,對屬性的訪問就好像直接訪問就好像直接訪問public字段成員,但在類內部是通過類方法訪問的。字段成員,但在類內部是通過類方法訪問的。l定義屬性的一般形式如下:定義屬性的一般形式如下: (自動屬性見自動屬性見MSDN) 訪
28、問修飾符訪問修飾符 數據類型數據類型 屬性名屬性名 get /獲取屬性的代碼,用獲取屬性的代碼,用return 返回值返回值 set /設置屬性的代碼,用設置屬性的代碼,用value賦值賦值 l創建只讀或只寫屬性,即只有創建只讀或只寫屬性,即只有get或或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; 類聲明類聲明常量常量字段字段構造構造函數函數屬性屬性方法方法4.2.2 類的數據成員和屬性類的數據成員和屬性l【實例實例4-2】定義類的數據成員及屬性。定義類的數據成員及屬性。 4.2.3 類的可訪問性類的可訪問性l注意:注意:(1) 命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制。命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制。(2) 如果未指定訪問修飾符,則如果未指定訪問修飾符,則類的成員默認為類的成員默認為private。 (3) 第一級類型(指不嵌套在其他類型中的類型)的可訪問性只能是第一級
30、類型(指不嵌套在其他類型中的類型)的可訪問性只能是internal或或public,默認可訪問性是,默認可訪問性是internal。4.2.4 值類型與引用類型值類型與引用類型lC#將數據類型分為值類型將數據類型分為值類型(value type)和引用類型和引用類型(reference type)。l1值類型值類型l值類型變量直接包含其本身的數據,前面提到的值類型變量直接包含其本身的數據,前面提到的簡單類型簡單類型(int、bool、char、float、double、decimal)、結構類型、結構類型(struct)、枚舉類型、枚舉類型(enum)等等都是值類型。在定義一個值類型變量后,將
31、直接都是值類型。在定義一個值類型變量后,將直接為該變量分配空間,可以直接賦值和使用。為該變量分配空間,可以直接賦值和使用。 4.2.4 值類型與引用類型值類型與引用類型l引用類型引用類型l與值類型不同,與值類型不同,引用類型變量本身并不包含數據,只是存引用類型變量本身并不包含數據,只是存儲對數據的引用,數據保存在其他位置,數組、字符串、儲對數據的引用,數據保存在其他位置,數組、字符串、類和后面要介紹的接口、委托等都屬于引用類型。類和后面要介紹的接口、委托等都屬于引用類型。引用型引用型變量在定義時并不會分配空間,只是在對其實例化后才真變量在定義時并不會分配空間,只是在對其實例化后才真正的分配存儲
32、空間。正的分配存儲空間。 4.2.4 值類型與引用類型值類型與引用類型l3裝箱和拆箱裝箱和拆箱lC#允許將任何類型的數據轉換為對象,或者將任何類型的對允許將任何類型的數據轉換為對象,或者將任何類型的對象轉換為與之兼容的數據類型。象轉換為與之兼容的數據類型。lC#把值類型轉換為對象的操作稱為裝箱,而把對象轉換為兼把值類型轉換為對象的操作稱為裝箱,而把對象轉換為兼容的值類型的操作稱為拆箱。容的值類型的操作稱為拆箱。C#的這種裝箱與拆箱操作類似的這種裝箱與拆箱操作類似于收發郵政包裹,發送包裹之前先裝箱打包,收到包裹后再于收發郵政包裹,發送包裹之前先裝箱打包,收到包裹后再拆箱解包。拆箱解包。l裝箱意味
33、著把一個值類型的數據轉換為一個對象類型的數據裝箱意味著把一個值類型的數據轉換為一個對象類型的數據,裝箱過程是隱式轉換過程,由系統自動完成,裝箱過程是隱式轉換過程,由系統自動完成.lC#中中Object類是所有類的最終基類,因此,可以將一個值類類是所有類的最終基類,因此,可以將一個值類型變量直接賦值給型變量直接賦值給Object對象對象 .裝箱和拆箱裝箱和拆箱裝箱裝箱(boxing):值類型轉換為引用類型值類型轉換為引用類型int i=42;object o=i;棧棧堆堆int iobject o&4242裝箱裝箱int iobject o&4242拆箱拆箱拆箱拆箱(unboxi
34、ng):引用類型轉換為值類型引用類型轉換為值類型 i= (int) o; /顯式轉換顯式轉換 4.3 類的方法類的方法l4.3.1 方法的聲明與調用方法的聲明與調用 l4.3.2 方法的參數傳遞方法的參數傳遞l4.3.3 方法的重載方法的重載 4.3.1 方法的聲明與調用方法的聲明與調用 l1方法的聲明方法的聲明l聲明方法的一般形式如下:聲明方法的一般形式如下: 訪問修飾符訪問修飾符 返回值類型返回值類型 方法名方法名 (參數列表參數列表) 語句語句; return 返回值返回值; 4.3.1 方法的聲明與調用方法的聲明與調用 l(1) 訪問修飾符控制方法的訪問級別,可用于方法的修訪問修飾符控
35、制方法的訪問級別,可用于方法的修飾符包括飾符包括public、protected、private和和internal等;等;訪問修飾符是可選的,默認情況下為訪問修飾符是可選的,默認情況下為 privatel(2) 方法的返回類型用于指定由該方法計算和返回的值方法的返回類型用于指定由該方法計算和返回的值的類型,可以是任何合法的數據類型,包括值類型和的類型,可以是任何合法的數據類型,包括值類型和引用類型,如果一個方法不返回一個值,則返回值類引用類型,如果一個方法不返回一個值,則返回值類型使用型使用void關鍵字來表示;關鍵字來表示;l(3) 方法名必須符合方法名必須符合C#的命名規范,與變量名的命
36、名的命名規范,與變量名的命名規則相同;規則相同;4.3.1 方法的聲明與調用方法的聲明與調用l(4) 參數列表是方法可以接受的輸入數據,當方法不需要參參數列表是方法可以接受的輸入數據,當方法不需要參數時,可省略參數列表,但不能省略圓括號;當參數不止數時,可省略參數列表,但不能省略圓括號;當參數不止一個時,需要使用逗號分隔,同時每一個參數都必須聲明一個時,需要使用逗號分隔,同時每一個參數都必須聲明數據類型,即使這些參數的數據類型相同也不例外;數據類型,即使這些參數的數據類型相同也不例外;l(5) 花括號中的內容為方法的主體,由若干條語句組成,每花括號中的內容為方法的主體,由若干條語句組成,每一條
37、語句都必須使用分號結尾。當方法結束時如果需要返一條語句都必須使用分號結尾。當方法結束時如果需要返回操作結果,則使用回操作結果,則使用return語句返回,并且返回的值的類語句返回,并且返回的值的類型要與返回值的類型相匹配。如果使用型要與返回值的類型相匹配。如果使用void標記方法為無標記方法為無返回值的方法,可省略返回值的方法,可省略return語句。語句。4.3.1 方法的聲明與調用方法的聲明與調用l2方法的調用方法的調用l一個方法一旦在某個類中聲明,就可由其他方法調用,調一個方法一旦在某個類中聲明,就可由其他方法調用,調用者既可以是同一個類中的方法,也可以是其他類中的方用者既可以是同一個類
38、中的方法,也可以是其他類中的方法。如果調用者是同一個類的方法,則可以直接調用,如法。如果調用者是同一個類的方法,則可以直接調用,如果調用者是其他類中的方法,則需要通過類的實例來引用果調用者是其他類中的方法,則需要通過類的實例來引用,但靜態方法例外,靜態方法通過類名直接調用,但靜態方法例外,靜態方法通過類名直接調用 l(1) 在方法聲明的類定義中調用該方法。其語法格式為:在方法聲明的類定義中調用該方法。其語法格式為: 方法名方法名(參數列表參數列表) l(2) 在方法聲明的類定義外部調用該方法,需要通過類聲明在方法聲明的類定義外部調用該方法,需要通過類聲明的對象調用該方法,其格式為:的對象調用該
39、方法,其格式為: 對象名對象名.方法名方法名(參數列表參數列表)4.3.2 方法的參數傳遞方法的參數傳遞l在聲明方法時,所定義的參數是形式參數(簡稱形參),在聲明方法時,所定義的參數是形式參數(簡稱形參),這些參數的值由調用方負責為其傳遞,調用方傳遞的是實這些參數的值由調用方負責為其傳遞,調用方傳遞的是實際數據,稱為實際參數(簡稱實參),調用方必須嚴格按際數據,稱為實際參數(簡稱實參),調用方必須嚴格按照被調用的方法所定義的參數類型和順序指定實參。在調照被調用的方法所定義的參數類型和順序指定實參。在調用方法時,參數傳遞就是將實參傳遞給形參的過程。用方法時,參數傳遞就是將實參傳遞給形參的過程。l
40、方法的參數傳遞按性質可分為方法的參數傳遞按性質可分為: 按值傳遞與按引用傳遞按值傳遞與按引用傳遞。4.3.2 方法的參數傳遞方法的參數傳遞l1按值傳參按值傳參l按值傳參時,把實參變量的值賦給相對應的形參變量,即按值傳參時,把實參變量的值賦給相對應的形參變量,即被調用的方法所接收到的只是實參數據值的一個副本。當被調用的方法所接收到的只是實參數據值的一個副本。當在方法內部更改了形參變量的數據值時,不會影響實參變在方法內部更改了形參變量的數據值時,不會影響實參變量的值,即實參變量和形參變量是兩個不相同的變量,他量的值,即實參變量和形參變量是兩個不相同的變量,他們具有各自的內存地址和數據值。因此,們具
41、有各自的內存地址和數據值。因此,實參變量的值傳實參變量的值傳遞給形參變量時是一種單向值傳遞遞給形參變量時是一種單向值傳遞。l值類型的參數在傳遞時默認為按值傳參值類型的參數在傳遞時默認為按值傳參。string和和object雖然是引用型數據,但從表現形式來看,其具有按值傳參雖然是引用型數據,但從表現形式來看,其具有按值傳參的效果。的效果。4.3.2 方法的參數傳遞方法的參數傳遞l【實例實例4-3】用值傳參進行參數值交換用值傳參進行參數值交換 4.3.2 方法的參數傳遞方法的參數傳遞l2按引用傳參按引用傳參l調用方向方法傳遞引用型參數時,調用方將把實參變量的引用賦調用方向方法傳遞引用型參數時,調用
42、方將把實參變量的引用賦給相對應的形參變量。實參變量的引用代表數據值的內存地址,給相對應的形參變量。實參變量的引用代表數據值的內存地址,因此,因此,形參變量和實參變量將指向同一個引用。形參變量和實參變量將指向同一個引用。如果在方法內部如果在方法內部更改了形參變量所引用的數據值,則同時也修改了實參變量所引更改了形參變量所引用的數據值,則同時也修改了實參變量所引用的數據值。用的數據值。l當值類型和當值類型和string類型參數要按引用方式傳參時,可以通過類型參數要按引用方式傳參時,可以通過ref關關鍵字來聲明引用參數,鍵字來聲明引用參數,無論是形參還是實參,只要希望傳遞數據無論是形參還是實參,只要希
43、望傳遞數據的引用,就必須添加的引用,就必須添加ref關鍵字。關鍵字。4.3.2 方法的參數傳遞方法的參數傳遞l【實例實例4-4】用引用傳參進行參數值交換。用引用傳參進行參數值交換。 (1) 將將【實例實例4-3】Swap方法聲明改為引用型參數:方法聲明改為引用型參數: public string Swap(ref int x,ref int y) (2) 將將【實例實例4-3】Swap方法調用改為引用型傳參:方法調用改為引用型傳參: lblShow.Text = s.Swap(ref a, ref b);自學:通過自學:通過MSDN求證:求證:string作為引用型,需用作為引用型,需用ref
44、聲聲明引用傳遞,否則按值傳遞。明引用傳遞,否則按值傳遞。4.3.2 方法的參數傳遞方法的參數傳遞3輸出參數輸出參數lref修飾的引用參數在傳參前要求先初始化實參。但有時候修飾的引用參數在傳參前要求先初始化實參。但有時候實參應由方法調用結束后返回,所在在傳參前確定其值是實參應由方法調用結束后返回,所在在傳參前確定其值是沒有意義的。這時可以使用輸出參數,沒有意義的。這時可以使用輸出參數,l輸出參數輸出參數不需要對實參進行初始化,它不需要對實參進行初始化,它專門用于把方法中專門用于把方法中的數據通過形參返回給實參的數據通過形參返回給實參,但,但不會將實參的值傳遞給形不會將實參的值傳遞給形參參。一個方
45、法中可允許有多個輸出參數。一個方法中可允許有多個輸出參數。lC#通過通過out關鍵字來聲明輸出參數,無論是形參還是實參關鍵字來聲明輸出參數,無論是形參還是實參,只要是輸出參數,都必須添加,只要是輸出參數,都必須添加out關鍵字。關鍵字。4.3.2 方法的參數傳遞方法的參數傳遞l【實例實例4-5】用輸出參數求文件路徑中的目錄和文用輸出參數求文件路徑中的目錄和文件名。件名。4.3.2 方法的參數傳遞方法的參數傳遞4引用類型數據的傳參引用類型數據的傳參l引用類型參數總是按引用傳遞的,引用類型參數總是按引用傳遞的,所以引用類型參數傳遞所以引用類型參數傳遞不需要使用不需要使用ref或或out關鍵字關鍵字
46、(string除外除外),引用類型參數的,引用類型參數的傳遞,實際上是將實參對數據的引用復制給了形參。所以傳遞,實際上是將實參對數據的引用復制給了形參。所以形參與實參共同指向同一個內存區域。形參與實參共同指向同一個內存區域。l【實例實例4-6】用引用類型數據的傳參修改對象值。用引用類型數據的傳參修改對象值。4.3.2 方法的參數傳遞方法的參數傳遞5數組型參數數組型參數l數組也是引用類型數據,把數組作為參數傳遞時,也是數組也是引用類型數據,把數組作為參數傳遞時,也是引用傳參。引用傳參。l數組作為參數,有兩種使用形式:數組作為參數,有兩種使用形式:l一是在形參數組前不添加一是在形參數組前不添加pa
47、rams修飾符,所對應的實修飾符,所對應的實參必須是一個數組名;參必須是一個數組名;l二是在形參數組前添加二是在形參數組前添加params修飾符。所對應的實參修飾符。所對應的實參可以是數組名,也可以是數組元素值的列表,此時,系可以是數組名,也可以是數組元素值的列表,此時,系統將自動把各種元素值組織到一個數組中。統將自動把各種元素值組織到一個數組中。l無論采用哪一種形式,形參數組都不能定義數組的長度無論采用哪一種形式,形參數組都不能定義數組的長度。4.3.2 方法的參數傳遞方法的參數傳遞l【實例實例4-7】使用不添加使用不添加params和添加和添加params修修改符的數組傳參求數組中的最大值
48、。改符的數組傳參求數組中的最大值。4.3.3 方法的重載方法的重載l在編程時,一般是一個方法對應一種功能,但有時需要實在編程時,一般是一個方法對應一種功能,但有時需要實現同一類功能,只是有些細節不同。現同一類功能,只是有些細節不同。例:例: 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允許用同一方法名定義多個方法,這些方法的參數個數或允許用
49、同一方法名定義多個方法,這些方法的參數個數或參數類型不同,這就是方法的重載參數類型不同,這就是方法的重載(function overloading)。4.3.3 方法的重載方法的重載l方法重載有兩點要求:方法重載有兩點要求: (1) 重載的方法重載的方法名稱必須相同名稱必須相同; (2) 重載方法的重載方法的形參個數或類型必須不同形參個數或類型必須不同,否則將出現一個,否則將出現一個“已定義了一個具有相同參數類型的成員已定義了一個具有相同參數類型的成員”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在調用具有重載的方法時,系統會根據參數的類型或個數在調用具有重載的方法時,系統會根據參數的類型或個數確定最匹配的方法被調用。確定最匹配的方法被調用。4.3.3 方法的重載方法的重載l【實例實例4-8】利用方法重載實現利用方法重載實現2個整數,個整數,2個雙精個雙精度數、度數、3個整數中求最大值。個整數中求最大值。4.4 構造函數構造函數l4.4.1 構造函數的聲明和調用構造函數的聲明和調用
51、 l4.4.2 構造函數的重載構造函數的重載 l4.4.3 構造函數與只讀字段構造函數與只讀字段 l4.4.4 對象的生命周期和析構函數對象的生命周期和析構函數4.4.1 構造函數的聲明和調用構造函數的聲明和調用 l構造函數是類中的一種特殊的方法,其一般形式如下:構造函數是類中的一種特殊的方法,其一般形式如下: public 構造函數名構造函數名(參數列表參數列表) 語句語句; l要求:要求: 構造函數的名稱必須和類名相同;且構造函數不允許有返構造函數的名稱必須和類名相同;且構造函數不允許有返回類型(包括回類型(包括void類型)。類型)。l不包含任何參數和語句的構造函數稱為不包含任何參數和語
52、句的構造函數稱為默認構造函數默認構造函數。如。如果沒有定義構造函數,編譯器將自動生成默認構造函數由果沒有定義構造函數,編譯器將自動生成默認構造函數由,默認構造函數的形式如下:,默認構造函數的形式如下: public 構造函數名構造函數名() 4.4.2 構造函數的重載構造函數的重載l構造函數重載與方法一樣可以重載。在一個類中,可以定義多構造函數重載與方法一樣可以重載。在一個類中,可以定義多個構造函數,以便對對象提供不同的初始化方法,以滿足創建個構造函數,以便對對象提供不同的初始化方法,以滿足創建對象時的不同需要。對象時的不同需要。默認構造函數:對不同數據類型初始化為相應的默認構造函數:對不同數
53、據類型初始化為相應的默認值:默認值: 參見參見MSDN。4.4.2 構造函數的重載構造函數的重載l【實例實例4-9】利用構造函數重載實現不同對象實例利用構造函數重載實現不同對象實例化。化。4.4.3 構造函數與只讀字段構造函數與只讀字段l只讀字段:通過關鍵字只讀字段:通過關鍵字readonly設置設置l只有在聲明時為它賦值,或者在對象初始化時賦只有在聲明時為它賦值,或者在對象初始化時賦值。值。l在聲明時為只讀字段賦值與聲明常量沒有區別,在聲明時為只讀字段賦值與聲明常量沒有區別,在對象初始化時為只讀字段賦值需要使用構造函在對象初始化時為只讀字段賦值需要使用構造函數實現。數實現。4.4.3 構造函數與只讀字段構造函數與只讀字段l【實例實例4-10】公園門票調價問題公園門票調價問題。4.4.4 對象的生命周期和析構函數對象的生命周期和析構函數 lC#程序中,一個對象是類的一個實例,實際上就是一個引程序中,一個對象是類的一個實例,實際上就是一個引用型的變量,在程序運行過程中,它需要占用一定的內存用型的變量,在程序運行過程中,它需要占用一定的內存空間,空間,.NET 的公共語言運行時負責為其分配內存。當程序的公共語言運行時負責為其分配內存。當程序運
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創新醫療服務模式遠程醫療技術的推廣與應用
- 企業如何選擇安全的醫療APP指南
- 雨季駕駛員安全教育培訓
- 辦公空間中如何通過分析醫遼大數據庫來改善員工生活習慣
- 粘土質隔熱耐火磚企業數字化轉型與智慧升級戰略研究報告
- 智能照明企業ESG實踐與創新戰略研究報告
- 白光LED熒光粉企業數字化轉型與智慧升級戰略研究報告
- 疏水閥企業縣域市場拓展與下沉戰略研究報告
- 管狀工件企業ESG實踐與創新戰略研究報告
- 冷拔異型鋼企業ESG實踐與創新戰略研究報告
- 湖北省武漢市2025屆高三第一次模擬考試數學試卷含解析
- 2025屆新高考語文古詩文理解性默寫匯編(新高考60篇含答案)
- 《數字中國建設整體布局規劃》解讀報告
- 《石油化工金屬管道布置設計規范》SHT3012-2011
- 2024年大學物理磁場教案設計示范
- 國開汽車學院《項目管理》形考作業1-4答案
- 醫學影像科提高診斷報告與手術后符合率持續性改進PDCA
- 2024年江蘇省蘇州市中考生物試卷含答案
- 多功能會議室建設方案
- 鋼樓梯工程施工組織設計方案
- 卜算子-送鮑浩然之浙東課件
評論
0/150
提交評論