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

下載本文檔

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

文檔簡(jiǎn)介

1、第第4章章 面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)本章主要內(nèi)容本章主要內(nèi)容n類(lèi)與對(duì)象類(lèi)與對(duì)象n字段、屬性和方法字段、屬性和方法n類(lèi)的繼承與多態(tài)類(lèi)的繼承與多態(tài)n委托與事件委托與事件*n接口接口n結(jié)構(gòu)與枚舉結(jié)構(gòu)與枚舉nC#2.0/4.0新特性新特性4.1 面向?qū)ο蟾拍蠲嫦驅(qū)ο蟾拍頽1、對(duì)象、對(duì)象nObject是由數(shù)據(jù)和允許的操作組成的封裝體,是現(xiàn)實(shí)世界中的某是由數(shù)據(jù)和允許的操作組成的封裝體,是現(xiàn)實(shí)世界中的某個(gè)實(shí)體在計(jì)算機(jī)邏輯中的映射和體現(xiàn)。個(gè)實(shí)體在計(jì)算機(jī)邏輯中的映射和體現(xiàn)。n數(shù)據(jù)數(shù)據(jù)-屬性屬性 操作操作-方法方法n2、類(lèi)和對(duì)象、類(lèi)和對(duì)象nClass是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對(duì)象的集合是一組具有相

2、同數(shù)據(jù)結(jié)構(gòu)和相同操作的對(duì)象的集合n類(lèi)是對(duì)象的模板,對(duì)象是類(lèi)的實(shí)例化類(lèi)是對(duì)象的模板,對(duì)象是類(lèi)的實(shí)例化nStudent s1=new Student(); /Student類(lèi)實(shí)例化了類(lèi)實(shí)例化了s1實(shí)例實(shí)例4.1 面向?qū)ο蟾拍蠲嫦驅(qū)ο蟾拍頽3、面向?qū)ο蟮幕咎卣?、面向?qū)ο蟮幕咎卣鱪(1)封裝封裝n利用抽象數(shù)據(jù)類(lèi)型,將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起。利用抽象數(shù)據(jù)類(lèi)型,將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起。抽象數(shù)據(jù)類(lèi)型用抽象數(shù)據(jù)類(lèi)型用Class來(lái)表示。來(lái)表示。n(2)繼承繼承n當(dāng)一個(gè)類(lèi)擁有另一個(gè)類(lèi)的所有數(shù)據(jù)和操作時(shí),就稱(chēng)這兩個(gè)當(dāng)一個(gè)類(lèi)擁有另一個(gè)類(lèi)的所有數(shù)據(jù)和操作時(shí),就稱(chēng)這兩個(gè)類(lèi)之間有繼承關(guān)系。類(lèi)之間有繼承

3、關(guān)系。n繼承是父類(lèi)(基類(lèi))和子類(lèi)(派生類(lèi))之間共享數(shù)據(jù)和方繼承是父類(lèi)(基類(lèi))和子類(lèi)(派生類(lèi))之間共享數(shù)據(jù)和方法的機(jī)制。法的機(jī)制。nC#通過(guò)接口來(lái)實(shí)現(xiàn)多重繼承通過(guò)接口來(lái)實(shí)現(xiàn)多重繼承n(3)多態(tài)多態(tài)n多態(tài)是指一個(gè)程序中同名的不同方法共存。多態(tài)是指一個(gè)程序中同名的不同方法共存。4.2 類(lèi)和對(duì)象類(lèi)和對(duì)象n類(lèi)的聲明:類(lèi)的聲明:n類(lèi)的修飾符(表類(lèi)的修飾符(表4-1) class :基類(lèi)基類(lèi) /類(lèi)成員類(lèi)成員(表表4-2)表表4-1 類(lèi)修飾符類(lèi)修飾符修飾符描 述new新建類(lèi),表示由基類(lèi)中繼承而來(lái)、與基類(lèi)中同名的成員public公有類(lèi),表示外界可以不受限制地訪問(wèn)private私有類(lèi),表示只有在定義它的類(lèi)才能訪問(wèn)

4、該類(lèi)。缺省為privateinternal內(nèi)部類(lèi),表示僅有本程序能夠訪問(wèn)該類(lèi)。protected保護(hù)類(lèi),表示可以訪問(wèn)該類(lèi)或從該類(lèi)派生的類(lèi)型。abstract抽象類(lèi),說(shuō)明該類(lèi)是一個(gè)不完整類(lèi),只有聲明而沒(méi)有具體的實(shí)現(xiàn)。一般只能用來(lái)做其他類(lèi)的基類(lèi)sealed密封類(lèi),說(shuō)明該類(lèi)不能作為其他類(lèi)的基類(lèi),不能再派生新的類(lèi)類(lèi)的示例類(lèi)的示例public class Student : Person /類(lèi)頭類(lèi)頭 /一對(duì)大括號(hào)之間是類(lèi)體一對(duì)大括號(hào)之間是類(lèi)體 private string id; /類(lèi)成員類(lèi)成員 private float score; public Student(string s, float d)

5、 /類(lèi)的構(gòu)造函數(shù)類(lèi)的構(gòu)造函數(shù) id = s; score = d; public void ShowStudentMsg() /類(lèi)的方法類(lèi)的方法 Console.WriteLine(ID:0 Score:1, id, score); 類(lèi)成員功 能 描 述類(lèi)成員功 能 描 述常量代表與該類(lèi)相關(guān)的常數(shù)值字段即該類(lèi)的變量,又稱(chēng)域方法實(shí)現(xiàn)由該類(lèi)執(zhí)行的計(jì)算和操作運(yùn)算符定義類(lèi)的實(shí)例能使用的運(yùn)算符索引器允許編程人員在訪問(wèn)數(shù)組時(shí),通過(guò)索引器訪問(wèn)類(lèi)的多個(gè)實(shí)例構(gòu)造函數(shù)在類(lèi)被實(shí)例化時(shí)首先執(zhí)行的函數(shù),主要是完成對(duì)象初始化操作屬性用于定義一些命名特性,通過(guò)它來(lái)讀取和寫(xiě)入相關(guān)的特性析構(gòu)函數(shù)在對(duì)象被銷(xiāo)毀之前最后執(zhí)行的函數(shù),

6、主要是完成對(duì)象結(jié)束時(shí)的收尾工作事件由類(lèi)產(chǎn)生的通知,用于說(shuō)明發(fā)生了什么事情靜態(tài)構(gòu)造函數(shù)用于規(guī)定在初始化該類(lèi)自身時(shí)需要做些什么表表4-2 類(lèi)的成員類(lèi)的成員表表4-3 類(lèi)成員的可訪問(wèn)性類(lèi)成員的可訪問(wèn)性訪問(wèn)修飾符可訪問(wèn)性描述public允許類(lèi)的使用者從外部進(jìn)行訪問(wèn)。這是限制最少的一種訪問(wèn)方式,它的優(yōu)點(diǎn)是使用靈活,缺點(diǎn)是外界有可能會(huì)破壞對(duì)象成員值的合理性private不允許外界訪問(wèn),也不允許派生類(lèi)訪問(wèn)。缺省的類(lèi)成員訪問(wèn)修飾符為tected不允許外界訪問(wèn),但允許這個(gè)類(lèi)的派生類(lèi)訪問(wèn)。internal允許同一個(gè)命名空間中的類(lèi)訪問(wèn)。readonly該成員的值只能讀,不能寫(xiě)。也就是說(shuō),除了賦

7、予初始值外,在程序的任何一個(gè)部分將無(wú)法更改這個(gè)成員的值。class Person /定義人類(lèi)定義人類(lèi) public string name; /公有成員名字公有成員名字 int age; /私有成員年齡私有成員年齡 protected string sex; /保護(hù)成員性別保護(hù)成員性別 public void ShowPersonMsg() /方法體方法體 Public static void A() /方法體方法體 class Student:Person /定義學(xué)生類(lèi)定義學(xué)生類(lèi) Int score; /私有成員成績(jī)私有成員成績(jī) public void ShowStudentMsg() Sh

8、owPersonMsg(); /正確,允許使用父類(lèi)的方法正確,允許使用父類(lèi)的方法 name = William; /正確,允許訪問(wèn)父類(lèi)的共有成員正確,允許訪問(wèn)父類(lèi)的共有成員 sex = man; /正確,允許訪問(wèn)父類(lèi)的保護(hù)成員正確,允許訪問(wèn)父類(lèi)的保護(hù)成員 class Teacher public string department; /公有成員系公有成員系 private float salary; /私有成員工資私有成員工資 public void ShowTeacherMsg() department = 計(jì)算機(jī)計(jì)算機(jī); /正確,允許訪問(wèn)自身成員正確,允許訪問(wèn)自身成員 salary = 6

9、741.9f; /正確,允許訪問(wèn)自身成員正確,允許訪問(wèn)自身成員 Person.A(); /正確,訪問(wèn)公共的靜態(tài)成員正確,訪問(wèn)公共的靜態(tài)成員 Person p1 = new Person(); = 張三張三; /正確,允許訪問(wèn)正確,允許訪問(wèn)p1的公有成員的公有成員 p1.ShowPersonMsg(); /p1.age = 21; /錯(cuò)誤,不允許訪問(wèn)錯(cuò)誤,不允許訪問(wèn)p1的私有成員的私有成員 Console.WriteLine(0,1,2, ,department ,salary ); 4.2.2 類(lèi)成員類(lèi)成員n3、靜態(tài)成員與實(shí)例成員、靜態(tài)成員與實(shí)例成員n靜態(tài)成員:使

10、用修飾符靜態(tài)成員:使用修飾符static定義的字段、方法、屬定義的字段、方法、屬性、運(yùn)算符、事件和構(gòu)造函數(shù)等性、運(yùn)算符、事件和構(gòu)造函數(shù)等n靜態(tài)成員與實(shí)例成員的區(qū)別靜態(tài)成員與實(shí)例成員的區(qū)別n靜態(tài)成員屬于類(lèi)所有,為這個(gè)類(lèi)的所有實(shí)例所共享,無(wú)論這靜態(tài)成員屬于類(lèi)所有,為這個(gè)類(lèi)的所有實(shí)例所共享,無(wú)論這個(gè)類(lèi)創(chuàng)建了多少個(gè)副本,一個(gè)靜態(tài)成員在內(nèi)存中只占有一塊個(gè)類(lèi)創(chuàng)建了多少個(gè)副本,一個(gè)靜態(tài)成員在內(nèi)存中只占有一塊區(qū)域。區(qū)域。n靜態(tài)成員的訪問(wèn)格式:類(lèi)名靜態(tài)成員的訪問(wèn)格式:類(lèi)名.靜態(tài)成員名。靜態(tài)成員名。 n實(shí)例成員屬于該類(lèi)創(chuàng)建的實(shí)例,要通過(guò)對(duì)象名使用實(shí)例成員屬于該類(lèi)創(chuàng)建的實(shí)例,要通過(guò)對(duì)象名使用4.2.3 對(duì)象創(chuàng)建與訪

11、問(wèn)對(duì)象創(chuàng)建與訪問(wèn)n1、對(duì)象創(chuàng)建、對(duì)象創(chuàng)建n類(lèi)名類(lèi)名 對(duì)象名對(duì)象名=new 構(gòu)造函數(shù)構(gòu)造函數(shù)(參數(shù)列表參數(shù)列表);n例如:例如:nPerson p1; /聲明一個(gè)聲明一個(gè)Person類(lèi)對(duì)象類(lèi)對(duì)象p1,并未創(chuàng)建,并未創(chuàng)建np1new Person();(); /實(shí)例化實(shí)例化p1,為,為p1分配內(nèi)存空間分配內(nèi)存空間nPerson p1new Person();(); /聲明對(duì)象聲明對(duì)象p1并實(shí)例化并實(shí)例化n使用使用new創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù),完成初始創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù),完成初始化操作化操作4.2.3 對(duì)象創(chuàng)建與訪問(wèn)對(duì)象創(chuàng)建與訪問(wèn)n2、對(duì)象的訪問(wèn)、對(duì)象的訪問(wèn)n對(duì)象的訪問(wèn)就

12、是訪問(wèn)對(duì)象成員,使用對(duì)象的訪問(wèn)就是訪問(wèn)對(duì)象成員,使用.運(yùn)算符運(yùn)算符n例如:例如:nPerson p1new Person()(); = 張三張三; np1.ShowPersonMsg(); 4.2.4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)n1、構(gòu)造函數(shù)、構(gòu)造函數(shù)n構(gòu)造函數(shù)的方法名與類(lèi)名相同構(gòu)造函數(shù)的方法名與類(lèi)名相同n構(gòu)造函數(shù)通常是構(gòu)造函數(shù)通常是public,構(gòu)造函數(shù)沒(méi)有返回類(lèi)型構(gòu)造函數(shù)沒(méi)有返回類(lèi)型n構(gòu)造函數(shù)是不能被繼承的構(gòu)造函數(shù)是不能被繼承的n一個(gè)類(lèi)必須至少有一個(gè)構(gòu)造函數(shù)。如果沒(méi)有聲明構(gòu)造函數(shù),系統(tǒng)一個(gè)類(lèi)必須至少有一個(gè)構(gòu)造函數(shù)。如果沒(méi)有聲明構(gòu)造函數(shù),系統(tǒng)會(huì)提供一個(gè)默認(rèn)的構(gòu)造函

13、數(shù)。默認(rèn)的構(gòu)造函數(shù)將數(shù)值類(lèi)型初始化會(huì)提供一個(gè)默認(rèn)的構(gòu)造函數(shù)。默認(rèn)的構(gòu)造函數(shù)將數(shù)值類(lèi)型初始化為為0,字符類(lèi)型初始化為,字符類(lèi)型初始化為null,邏輯類(lèi)型初始化為,邏輯類(lèi)型初始化為falsen在創(chuàng)建一個(gè)類(lèi)的新對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類(lèi)的構(gòu)造函數(shù)來(lái)初在創(chuàng)建一個(gè)類(lèi)的新對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類(lèi)的構(gòu)造函數(shù)來(lái)初始化新對(duì)象。始化新對(duì)象。4.2.4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)n2 2、析構(gòu)函數(shù)(簡(jiǎn)單了解)、析構(gòu)函數(shù)(簡(jiǎn)單了解)n析構(gòu)函數(shù)用于當(dāng)類(lèi)實(shí)例從內(nèi)存中刪除時(shí),完成資源的析構(gòu)函數(shù)用于當(dāng)類(lèi)實(shí)例從內(nèi)存中刪除時(shí),完成資源的釋放與清理工作。釋放與清理工作。n析構(gòu)函數(shù)的名稱(chēng)是在類(lèi)名前加上一個(gè)析構(gòu)函數(shù)的名稱(chēng)是

14、在類(lèi)名前加上一個(gè)“ ”n析構(gòu)函數(shù)沒(méi)有參數(shù)、沒(méi)有返回類(lèi)型、沒(méi)有訪問(wèn)修飾符析構(gòu)函數(shù)沒(méi)有參數(shù)、沒(méi)有返回類(lèi)型、沒(méi)有訪問(wèn)修飾符n不鼓勵(lì)用析構(gòu)函數(shù),無(wú)用存儲(chǔ)單元收集器會(huì)自動(dòng)在后不鼓勵(lì)用析構(gòu)函數(shù),無(wú)用存儲(chǔ)單元收集器會(huì)自動(dòng)在后臺(tái)完成釋放與清理工作臺(tái)完成釋放與清理工作4.3 字段(變量、域)字段(變量、域)n說(shuō)明:說(shuō)明:n字段一般置為字段一般置為private,以提高數(shù)據(jù)的封裝程度,以提高數(shù)據(jù)的封裝程度nstatic字段為類(lèi)所有,通過(guò)類(lèi)名調(diào)用字段為類(lèi)所有,通過(guò)類(lèi)名調(diào)用n非靜態(tài)字段通過(guò)對(duì)象來(lái)訪問(wèn)非靜態(tài)字段通過(guò)對(duì)象來(lái)訪問(wèn)nreadonly字段,只能在聲明時(shí)賦值或者通過(guò)構(gòu)造函數(shù)字段,只能在聲明時(shí)賦值或者通過(guò)構(gòu)造函數(shù)c

15、lass Student readonly string name=“Jack”; /聲明聲明只讀字段只讀字段,并賦值,并賦值 private float score; static int age; /靜態(tài)字段靜態(tài)字段 protected string id ; 4.4 屬性屬性n1、屬性定義格式:、屬性定義格式:nget方法完成對(duì)數(shù)據(jù)值的讀取,方法完成對(duì)數(shù)據(jù)值的讀取,return用于返回讀取的值用于返回讀取的值nset方法完成對(duì)數(shù)據(jù)值的設(shè)置修改,方法完成對(duì)數(shù)據(jù)值的設(shè)置修改,value是一個(gè)關(guān)鍵字是一個(gè)關(guān)鍵字n2、屬性的訪問(wèn):、屬性的訪問(wèn):n若屬性是靜態(tài)成員,通過(guò)若屬性是靜態(tài)成員,通過(guò)”類(lèi)名

16、類(lèi)名. .屬性名屬性名“訪問(wèn)訪問(wèn)n若屬性是非靜態(tài)成員,通過(guò)若屬性是非靜態(tài)成員,通過(guò)”對(duì)象名對(duì)象名. .屬性名屬性名“訪問(wèn)訪問(wèn)Private 類(lèi)型類(lèi)型 字段名字段名public 類(lèi)型類(lèi)型 屬性名屬性名 get return 字段名字段名; set 字段名字段名 = value; 4.4 屬性屬性n屬性與字段的比較屬性與字段的比較n屬性可以實(shí)現(xiàn)只讀或只寫(xiě),而字段不可屬性可以實(shí)現(xiàn)只讀或只寫(xiě),而字段不可n屬性的屬性的set方法可以進(jìn)行有效性檢查,而字段不能方法可以進(jìn)行有效性檢查,而字段不能n屬性的屬性的get方法不僅可以返回字段的值,還可以返方法不僅可以返回字段的值,還可以返回處理結(jié)果回處理結(jié)果n對(duì)外

17、公布事物的狀態(tài)信息,使用屬性對(duì)外公布事物的狀態(tài)信息,使用屬性n例如例如,一個(gè)表示月份的字段,其值的范圍應(yīng)在,一個(gè)表示月份的字段,其值的范圍應(yīng)在112之間,但是我們無(wú)法阻止用戶(hù)輸入非法的數(shù)值,解決之間,但是我們無(wú)法阻止用戶(hù)輸入非法的數(shù)值,解決這個(gè)問(wèn)題的辦法就是使用屬性。這個(gè)問(wèn)題的辦法就是使用屬性。4.5 方法方法n1、概念、概念n方法表示類(lèi)的動(dòng)態(tài)行為,即類(lèi)所具有的功能和操作方法表示類(lèi)的動(dòng)態(tài)行為,即類(lèi)所具有的功能和操作n2、方法的聲明、方法的聲明方法修飾符方法修飾符 返回值類(lèi)型返回值類(lèi)型 方法名方法名(形參形參1,形參,形參2.) /方法體;方法體;方法修飾符有很多,若省略則默認(rèn)為是方法修飾符有很

18、多,若省略則默認(rèn)為是private。最常用的修飾符是最常用的修飾符是public、private、static方法如果有返回值,使用方法如果有返回值,使用return語(yǔ)句語(yǔ)句有參方法與無(wú)參方法調(diào)用時(shí)的不同有參方法與無(wú)參方法調(diào)用時(shí)的不同4.5 方法方法n3、方法的調(diào)用、方法的調(diào)用n在方法聲明的類(lèi)中調(diào)用方法在方法聲明的類(lèi)中調(diào)用方法n方法名方法名(實(shí)際參數(shù)列表實(shí)際參數(shù)列表);n在方法聲明的類(lèi)外部調(diào)用方法在方法聲明的類(lèi)外部調(diào)用方法n對(duì)象名對(duì)象名.方法名方法名(實(shí)參列表實(shí)參列表);n4、參數(shù)類(lèi)型、參數(shù)類(lèi)型n值參數(shù)值參數(shù)不含任何修飾符不含任何修飾符n引用參數(shù)引用參數(shù)以以ref修飾符聲明修飾符聲明n輸出參數(shù)

19、輸出參數(shù)以以out修飾符聲明修飾符聲明n數(shù)組型參數(shù)數(shù)組型參數(shù)以以params修飾符聲明修飾符聲明4.5 方法方法-參數(shù)類(lèi)型參數(shù)類(lèi)型n1.值參數(shù)值參數(shù)不含任何修飾符不含任何修飾符n參數(shù)傳遞時(shí),把實(shí)參的值復(fù)制給形參,形參的值發(fā)參數(shù)傳遞時(shí),把實(shí)參的值復(fù)制給形參,形參的值發(fā)生改變不會(huì)影響實(shí)參的值,從而保證了實(shí)參數(shù)據(jù)的生改變不會(huì)影響實(shí)參的值,從而保證了實(shí)參數(shù)據(jù)的安全安全n2.引用型引用型以以ref修飾符聲明修飾符聲明n形參和實(shí)參前均使用關(guān)鍵字形參和實(shí)參前均使用關(guān)鍵字 refn參數(shù)傳遞時(shí),把實(shí)參的地址傳遞給形參,其特點(diǎn)是參數(shù)傳遞時(shí),把實(shí)參的地址傳遞給形參,其特點(diǎn)是形參的值發(fā)生改變時(shí),同時(shí)改變實(shí)參的值。形參

20、的值發(fā)生改變時(shí),同時(shí)改變實(shí)參的值。n實(shí)例實(shí)例4-4 引用型參數(shù)應(yīng)用。引用型參數(shù)應(yīng)用。2個(gè)數(shù)據(jù)交換個(gè)數(shù)據(jù)交換4.5 方法方法-參數(shù)類(lèi)型參數(shù)類(lèi)型n3.輸出參數(shù)輸出參數(shù)以以out修飾符聲明修飾符聲明n形參和實(shí)參前均使用關(guān)鍵字形參和實(shí)參前均使用關(guān)鍵字outnout隱含隱含return(通過(guò)變量返回),故方法的返回類(lèi)(通過(guò)變量返回),故方法的返回類(lèi)型為型為voidn輸出型參數(shù)也是將內(nèi)存地址傳遞給方法輸出型參數(shù)也是將內(nèi)存地址傳遞給方法n與引用型參數(shù)的區(qū)別是調(diào)用方法前無(wú)需對(duì)變量進(jìn)行初與引用型參數(shù)的區(qū)別是調(diào)用方法前無(wú)需對(duì)變量進(jìn)行初始化始化n輸出型參數(shù)用于傳遞方法返回的數(shù)據(jù)輸出型參數(shù)用于傳遞方法返回的數(shù)據(jù)n實(shí)例

21、實(shí)例4-5 計(jì)算計(jì)算x+y,x-y4.5 方法方法-參數(shù)類(lèi)型參數(shù)類(lèi)型n4.數(shù)組參數(shù)數(shù)組參數(shù)以以params修飾符聲明修飾符聲明n參數(shù)數(shù)組必須放在整個(gè)參數(shù)列表的最后,同時(shí)參參數(shù)數(shù)組必須放在整個(gè)參數(shù)列表的最后,同時(shí)參數(shù)數(shù)組不允許是多維數(shù)組。數(shù)數(shù)組不允許是多維數(shù)組。n實(shí)例實(shí)例4-6 求數(shù)組元素的最大值、最小值和所有求數(shù)組元素的最大值、最小值和所有元素和元素和4.5.3 靜態(tài)方法和實(shí)例方法靜態(tài)方法和實(shí)例方法n靜態(tài)方法使用靜態(tài)方法使用static修飾符,屬于類(lèi)所有修飾符,屬于類(lèi)所有n靜態(tài)方法只能訪問(wèn)類(lèi)中的靜態(tài)成員靜態(tài)方法只能訪問(wèn)類(lèi)中的靜態(tài)成員class Class1 public static int

22、sum1(int x, int y) return x + y; public int sum1(int x, int y) return x + y; int a=10,b=12;int s2 = Class1.sum1(a, b);Class1 c = new Class1();int s1 = c.sum2(a, b);4.5.4 方法重載方法重載n1.方法重載概念方法重載概念n類(lèi)中類(lèi)中2個(gè)以上的方法(包括繼承而來(lái)的方法)名稱(chēng)個(gè)以上的方法(包括繼承而來(lái)的方法)名稱(chēng)相同,但簽名不同,這種情況稱(chēng)為方法的重載相同,但簽名不同,這種情況稱(chēng)為方法的重載n2 .方法簽名概念方法簽名概念n是指調(diào)用方法

23、所需要的方法名稱(chēng)、參數(shù)個(gè)數(shù)、參數(shù)是指調(diào)用方法所需要的方法名稱(chēng)、參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型和修飾符類(lèi)型和修飾符n3.說(shuō)明說(shuō)明n如果派生類(lèi)與基類(lèi)的方法同名,則編譯時(shí)給出一個(gè)如果派生類(lèi)與基類(lèi)的方法同名,則編譯時(shí)給出一個(gè)警告,要求在同名的派生類(lèi)方法前加上關(guān)鍵字警告,要求在同名的派生類(lèi)方法前加上關(guān)鍵字new4.5.4 方法重載方法重載實(shí)例實(shí)例4-8class MyClass public int Add(int x, int y) return x + y; public double Add(double x, double y) return x + y; public string Add(string

24、x, string y) return x + y; MyClass c = new MyClass(); Console.WriteLine(c.Add(12, 45); Console.WriteLine(c.Add(12.3, 89.5); Console.WriteLine(c.Add(My name is , annoy);4.5.4方法的重載方法的重載-實(shí)例(實(shí)例(2)class MyClass public int Add(int x, int y) return x + y; class SubClass:MyClass /public int Add(int x, int y

25、) return x + y; public double Add(double x, double y) return x + y; 4.5.6 this關(guān)鍵字關(guān)鍵字n在普通方法中,在普通方法中,this表示調(diào)用這個(gè)方法的對(duì)象表示調(diào)用這個(gè)方法的對(duì)象n在構(gòu)造函數(shù)中,在構(gòu)造函數(shù)中,this表示新創(chuàng)建的對(duì)象表示新創(chuàng)建的對(duì)象nThis的幾種用法:的幾種用法:n1.使用使用this解決局部變量與域同名的問(wèn)題解決局部變量與域同名的問(wèn)題n2.在構(gòu)造函數(shù)中用在構(gòu)造函數(shù)中用this調(diào)用另一構(gòu)造函數(shù)調(diào)用另一構(gòu)造函數(shù)n3. this可以指代類(lèi)本身的實(shí)例可以指代類(lèi)本身的實(shí)例使用使用this解決局部變量與域同名的問(wèn)題

26、解決局部變量與域同名的問(wèn)題class Employee private string name,sex; int age; public Employee (string name,int age) /this. name表示域變量,表示域變量,name表示的是參數(shù)變量表示的是參數(shù)變量 =name; this.age =age; 在構(gòu)造函數(shù)中用在構(gòu)造函數(shù)中用this調(diào)用另一構(gòu)造函數(shù)調(diào)用另一構(gòu)造函數(shù)class Employee private string name,sex; int age; public Employee (string name,int age) thi

27、 =name; this.age =age; /調(diào)用另一構(gòu)造函數(shù)初始化調(diào)用另一構(gòu)造函數(shù)初始化name和和age public Employee (string name,int age,string sex) :this(name,age) this.sex=sex; 規(guī)范原則是,只在必要時(shí)才使用規(guī)范原則是,只在必要時(shí)才使用this;該實(shí)例中參數(shù)、字段宜采用不同命名規(guī)范替代該實(shí)例中參數(shù)、字段宜采用不同命名規(guī)范替代thisthis可以指代類(lèi)本身的實(shí)例可以指代類(lèi)本身的實(shí)例class Employee public string Name get; set; public string

28、Salary get; set; public void Save() DataStorage.Store(this); class DataStorage public static void Store(Employee employee) /.方法體方法體 4.6 繼承繼承n繼承是面向?qū)ο缶幊讨幸粋€(gè)重要的特性,也是實(shí)現(xiàn)代繼承是面向?qū)ο缶幊讨幸粋€(gè)重要的特性,也是實(shí)現(xiàn)代碼復(fù)用的重要手段。碼復(fù)用的重要手段。 n被繼承的類(lèi)被稱(chēng)為基類(lèi)或父類(lèi),繼承其他類(lèi)的類(lèi)叫做被繼承的類(lèi)被稱(chēng)為基類(lèi)或父類(lèi),繼承其他類(lèi)的類(lèi)叫做派生類(lèi)(派生類(lèi)(Subclass)或子類(lèi)。)或子類(lèi)。n單繼承單繼承 n繼承是可以傳遞的繼承是可

29、以傳遞的n子類(lèi)自動(dòng)地從父類(lèi)那里繼承所有成員,與成員的訪問(wèn)子類(lèi)自動(dòng)地從父類(lèi)那里繼承所有成員,與成員的訪問(wèn)方式無(wú)關(guān)。訪問(wèn)方式只能決定派生類(lèi)能否訪問(wèn)它們,方式無(wú)關(guān)。訪問(wèn)方式只能決定派生類(lèi)能否訪問(wèn)它們,即可見(jiàn)性即可見(jiàn)性class Student : Person /4.6.2 派生類(lèi)派生類(lèi)n1.派生類(lèi)定義格式派生類(lèi)定義格式nPublic class 派生類(lèi)名稱(chēng):基類(lèi)名稱(chēng)派生類(lèi)名稱(chēng):基類(lèi)名稱(chēng)類(lèi)體類(lèi)體n2.說(shuō)明說(shuō)明n訪問(wèn)修飾符可以是訪問(wèn)修飾符可以是publicpublic、privateprivate、protectedprotected。通。通常使用常使用publicpublic以保證類(lèi)的開(kāi)放性。以保證

30、類(lèi)的開(kāi)放性。n父類(lèi)只能有一個(gè)(單繼承),如果要多重繼承,則應(yīng)父類(lèi)只能有一個(gè)(單繼承),如果要多重繼承,則應(yīng)使用接口使用接口n繼承可以傳遞,即繼承可以傳遞,即c c從從b b繼承,繼承,b b從從a a繼承,則繼承,則c c繼承了繼承了b b和和a a的所有成員(字段、屬性、方法、索引等)的所有成員(字段、屬性、方法、索引等)n子類(lèi)除繼承父類(lèi)的成員外,還可以添加新成員,隱藏子類(lèi)除繼承父類(lèi)的成員外,還可以添加新成員,隱藏或修改父類(lèi)的成員。常見(jiàn)的是或修改父類(lèi)的成員。常見(jiàn)的是方法的繼承、添加、重方法的繼承、添加、重載、隱藏、重寫(xiě)(覆蓋)載、隱藏、重寫(xiě)(覆蓋)4.6.2 派生類(lèi)派生類(lèi)n子類(lèi)可以定義與父類(lèi)

31、同名的方法,有以下三種可能子類(lèi)可以定義與父類(lèi)同名的方法,有以下三種可能的情況:的情況:n方法的重載方法的重載:定義與父類(lèi)同名、但簽名不同的方法:定義與父類(lèi)同名、但簽名不同的方法n方法的隱藏方法的隱藏:定義與父類(lèi)同名且簽名也相同的方法。:定義與父類(lèi)同名且簽名也相同的方法。子類(lèi)方法名前應(yīng)加子類(lèi)方法名前應(yīng)加new關(guān)鍵字關(guān)鍵字n方法的重寫(xiě)方法的重寫(xiě):定義與父類(lèi)同名且簽名也相同的方法。:定義與父類(lèi)同名且簽名也相同的方法。父類(lèi)方法名前使用父類(lèi)方法名前使用virtual或或abstract修飾;子類(lèi)同修飾;子類(lèi)同名方法名前用名方法名前用override修飾修飾4.7.1方法的重載和隱藏方法的重載和隱藏 cl

32、ass MyClass public int Add(int x, int y) return x + y; class SubClass:MyClass public new int Add(int x, int y) return x + y; public double Add(double x, double y) return x + y; 4.7.2 方法的重寫(xiě)方法的重寫(xiě)(虛方法虛方法)class A /基類(lèi)中定義虛方法基類(lèi)中定義虛方法 public virtual void VirtualMethod() Console.WriteLine(基類(lèi)方法基類(lèi)方法); class B:

33、A /派生類(lèi)中重寫(xiě)虛方法派生類(lèi)中重寫(xiě)虛方法 public override void VirtualMethod() Console.WriteLine(派生類(lèi)方法派生類(lèi)方法); 4.7.2 方法的重寫(xiě)方法的重寫(xiě)(抽象方法抽象方法)abstract class Vehicle /抽象汽車(chē)類(lèi)抽象汽車(chē)類(lèi) public abstract void Whistle (); /抽象方法必須包含在抽象類(lèi)中抽象方法必須包含在抽象類(lèi)中class Car:Vehicle /轎車(chē)類(lèi)轎車(chē)類(lèi) public override void Whistle () /重寫(xiě)基類(lèi)的抽象方法重寫(xiě)基類(lèi)的抽象方法 Console.Wri

34、teLine(The car is speaking:Di-di!);/抽象方法實(shí)現(xiàn)抽象方法實(shí)現(xiàn) 4.7.3 抽象類(lèi)與抽象方法抽象類(lèi)與抽象方法n抽象類(lèi)和抽象方法均使用抽象類(lèi)和抽象方法均使用abstract修飾符修飾符n抽象類(lèi)只能作為其他類(lèi)的基類(lèi),不能被實(shí)例化抽象類(lèi)只能作為其他類(lèi)的基類(lèi),不能被實(shí)例化n抽象方法一定屬于抽象類(lèi)抽象方法一定屬于抽象類(lèi),抽象類(lèi)不一定非要包含抽,抽象類(lèi)不一定非要包含抽象方法象方法n抽象方法不提供具體實(shí)現(xiàn)代碼,只寫(xiě)方法名及方法的抽象方法不提供具體實(shí)現(xiàn)代碼,只寫(xiě)方法名及方法的簽名,無(wú)需寫(xiě)簽名,無(wú)需寫(xiě)。n抽象類(lèi)的派生類(lèi)必須重寫(xiě)基類(lèi)中的抽象方法抽象類(lèi)的派生類(lèi)必須重寫(xiě)基類(lèi)中的抽象方法nabstract與與sealed不能同時(shí)使用不能同時(shí)使用4.7.4 密封類(lèi)和密封方法密封類(lèi)和密封方法n密封類(lèi)和密封方法均使用密封類(lèi)和密封方法均使用sealed修飾符修飾符n密封類(lèi)是不允許繼承的類(lèi),密封類(lèi)是不允許繼承的類(lèi),String類(lèi)是一個(gè)密封類(lèi)類(lèi)是一個(gè)密封類(lèi)n密封方法是不允許在派生類(lèi)中對(duì)該方法重寫(xiě)。密封方法是不允許在派生類(lèi)中對(duì)該方法重寫(xiě)。n密封方法一定是重寫(xiě)父類(lèi)的虛方法或抽象方法密封方法一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論