




已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2019/7/11,1,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,Visual C# .Net 程序設(shè)計,電子科大成都學院計算機系 課件制作:羅福強 E-Mail:LFQ501SOHU.COm,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,2,第四章 面向?qū)ο蟮母呒壋绦蛟O(shè)計,4.1 類的繼承性與多態(tài)性 4.2 抽象類與接口 4.3 分部類與命名空間 4.4 委托,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,3,4.1 類的繼承性與多態(tài)性,一、類的繼承性 二、類的多態(tài)性,返回,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,4,一、類的繼承性,類的繼承性最主要的優(yōu)點就是能提高代碼的可重用性 1派生類的聲明 2派生類的構(gòu)造函數(shù) 3密封類,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,5,1派生類的聲明,(1) 派生類的特點 可以擁有自己的成員 可以隱式地從基類繼承所有成員,包括方法、字段、屬性和事件,但私有成員、構(gòu)造函數(shù)和析構(gòu)函數(shù)等除外。 只能從一個類中繼承 (2) 一般形式,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,6,派生類的示例,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,7,2派生類的構(gòu)造函數(shù),在C#中,派生類不能繼承其基類的構(gòu)造函數(shù),但通過使用base關(guān)鍵字,派生類構(gòu)造函數(shù)就可以調(diào)用基類的構(gòu)造函數(shù)。 當創(chuàng)建派生類對象時,系統(tǒng)首先執(zhí)行基類構(gòu)造函數(shù),然后執(zhí)行派生類的構(gòu)造函數(shù)。 實例4-1演示(源代碼見教材),2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,8,3密封類,使用密封類可以阻止一個類的代碼被其他類繼承 使用密封類的好處: 可以提高應(yīng)用程序的可靠性和性能。 軟件企業(yè)通過使用密封類還可以把自己的知識產(chǎn)權(quán)保護起來,避免他人共享代碼。 在C#中,添加關(guān)鍵字sealed可以聲明密封類。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,9,二、類的多態(tài)性,為了使用派生類能更改基類的數(shù)據(jù)和行為,C#提供了兩種選擇: 1使用new關(guān)鍵字重新定義類的成員 2. 用virtual和override關(guān)鍵字定義類成員,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,10,1使用new關(guān)鍵字重新定義類的成員,使用new關(guān)鍵字來定義與基類中同名的成員,即可替換基類的成員。 如果基類定義了一個方法、字段或?qū)傩?,則 new 關(guān)鍵字用于在派生類中創(chuàng)建該方法、字段或?qū)傩缘男露x。 new 關(guān)鍵字放置在要替換的類成員的返回類型之前。 例如,設(shè)基類Person擁有Answer方法,則派生類Student重新定義Answer的格式如下: public new string Answer() /代碼行 注,完整代碼請參見教材,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,11,2. 用virtual和override關(guān)鍵字定義類成員,“使用new聲明類的成員”的缺陷是仍然可以通過強制類型轉(zhuǎn)換來繼續(xù)訪問基類的成員。 為了使派生類的實例完全替換來自基類的成員,在C#中,首先在基類中用virtual 關(guān)鍵字標識虛擬成員,然后在派生類中用 override 關(guān)鍵將基類的虛擬成員覆蓋掉。 例如,基類Person及其派生類Student的Answer方法書寫格式如下:,注,完整代碼請參見教材,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,12,特別注意,使用virtual和override時要注意以下幾點: (1)字段不能是虛擬的,只有方法、屬性、事件和索引器才可以是虛擬的; (2)使用virtual修飾符后,不允許再使用static、abstract或override修飾符; (3)派生類對象即使被強制轉(zhuǎn)換為基類對象,所引用的仍然是派生類的成員; (4)派生類可以通過密封來停止虛擬繼承,此時派生類的成員使用sealed override聲明。 實例4-2演示(源代碼見教材),返回,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,13,4.2 抽象類與接口,一、抽象類 二、接口 三、抽象類與接口的比較,返回,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,14,一、抽象類,1. 抽象類的聲明 2. 抽象屬性 3. 抽象方法,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,15,1. 抽象類的聲明,在C#中,抽象類使用關(guān)鍵字abstract聲明. 一般形式如下: public abstract class 抽象類名 / 類的成員 抽象類的特點: 抽象類是用來作為基類的,不能直接實例化,而且只能使用abstract關(guān)鍵字來標識。抽象類的用途是提供多個派生類可共享的基類的公共定義。 抽象類可以包含抽象的成員,如抽象屬性和抽象方法,也可以包含非抽象的成員,甚至還可以包含虛方法。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,16,2. 抽象屬性,抽象屬性的特點 抽象屬性聲明不提供屬性訪問器的實現(xiàn),它只聲明該類支持的屬性,而將訪問器的實現(xiàn)留給派生類。 抽象屬性同樣可以是只讀的、只寫的或可讀寫的屬性。 當派生類從抽象類中繼承一個抽象屬性時,派生類必須重載該抽象屬性。 抽象屬性使用abstract關(guān)鍵字來標識 實例4-3演示(源代碼參寫教材),2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,17,3. 抽象方法,抽象方法的特點: 抽象方法聲明不提供方法的實現(xiàn),它必須是一個空方法,而將方法實現(xiàn)留給派生類。 當派生類從抽象類中繼承一個抽象方法時,派生類必須重載該抽象方法。 由于抽象方法沒有實現(xiàn),因此,抽象方法不包含常規(guī)的方法體,以分號結(jié)尾。 抽象方法使用abstract關(guān)鍵字來標識,格式如下: 訪問修飾符 abstract 返回值類型 方法名(參數(shù)列表); 其中,訪問修飾符不能是private,參數(shù)列表可省略。 注意,抽象成員必須在抽象類中聲明,但抽象類不要求必須包含抽象成員。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,18,抽象方法示例(完整代碼請參見教材,public abstract class Person /這是一個抽象類 /聲明抽象方法成員,注意抽象方法無方法體 public abstract string Answer(); public class Student : Person /重載基類的抽象方法 public override string Answer() /代碼行 ,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,19,二、接口,1. 接口的聲明 2. 接口的實現(xiàn) 3. 繼承多個接口,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,20,1. 接口的聲明,說明: 默認訪問修飾符為public,還可以是protected、internal和private; 為了區(qū)別類,接口名的命名時建議使用大寫字母I打頭; 基接口列表可省略,表示接口也具有繼承性,從多個基口繼承,基接口名之間用逗號分隔。 接口成員可以是屬性、方法、索引器和事件,不能包含字段、構(gòu)造函數(shù)等。 所有接口成員隱式地具有了public訪問修飾符,因此,接口成員不能添加任何訪問修飾符。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,21,2. 接口的實現(xiàn),接口主要用來定義一個規(guī)則,讓企業(yè)內(nèi)部或行業(yè)內(nèi)部的軟件開發(fā)人員按標準去實現(xiàn)應(yīng)用程序的功能。 因此,必須要有類或結(jié)構(gòu)來繼承所定義的接口并實現(xiàn)它,否則定義接口就毫無意義。 相關(guān)示例請參見教材,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,22,3. 繼承多個接口,一個接口可以同時繼承多個基接口的定義,一個類或結(jié)構(gòu)也可以同時繼承多個接口的定義。 當類繼承的多個接口中存在同名的成員時,在實現(xiàn)時為了區(qū)分是從哪個接口繼承來的,C#建議使用顯示實現(xiàn)接口的方法,即使用接口名稱和一個句點命名該類成員。 顯示實現(xiàn)的成員不能帶任何訪問修飾符,也不能通過類的實現(xiàn)來引用或調(diào)用,必須通過所屬的接口來引用或調(diào)用。 實例4-4演示(源代碼參寫教材),2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,23,三、抽象類與接口的比較,抽象類是一種不能實例化的類,抽象類可以包含抽象成員,也可以包含非抽象成員,即抽象類可以是完全實現(xiàn)的,也可以是部分實現(xiàn)的,或者完全不實現(xiàn)的。抽象類可以用來封裝所有派生類的通用功能。 與抽象類不同的是,接口頂多像一個完全沒有實現(xiàn)的只包含抽象成員的抽象類,因此無法使用接口來封裝所有派生類的通用功能,接口更多地用來制定程序設(shè)計開發(fā)規(guī)范,接口的代碼實現(xiàn)由開發(fā)者完成。 C#規(guī)定一個類只能從一個基類派生,但允許從多個接口派生。 抽象類為管理組件版本提供了一個簡單易行的方法。通過更新基類,所有派生類都將自動進行相應(yīng)改動。而接口在創(chuàng)建后就不能再更改,如果需要修改接口,必須創(chuàng)建新的接口。,返回,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,24,4.3 分部類與命名空間,一、分部類的定義 二、使用命名空間,返回,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,25,一、分部類的定義,C# 2.0允許將類、結(jié)構(gòu)或接口的定義拆分到兩個或多個源文件中,讓每個源文件只包含類型定義的一部分,編譯時編譯器自動把所有部分組合起來進行編譯。 使用分部類的好處 一個類的源代碼可以分布于多個獨立文件中,在處理大型項目時,過去很多只能由一個人進行的編程任務(wù),現(xiàn)在可以由多個人同時進行,這樣將大大加快了程序設(shè)計的工作進度。 Visual Studio 2005利分部類自動生成最基本的源代碼,程序員只需編寫項目的業(yè)務(wù)處理邏輯代碼,編譯時Visual Studio 2005會自動把編寫的代碼與自動生成的代碼進行合并編譯。 若要拆分類定義,可使用 partial 關(guān)鍵字修飾符。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,26,分部類示例,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,27,注意事項,處理分部類的定義時需遵循以下幾個規(guī)則: (1)同一類型的各個部分的所有分部類的定義都必須使用partial進行修飾。 (2)partial修飾符只能出現(xiàn)在緊靠關(guān)鍵字 class、struct或interface前面的位置。 (3)分部類的各部分或者各個源文件都可以獨立引用類庫,且堅持“誰使用誰負責添加引用”的原則。 (4)分部類的定義中允許使用嵌套的分部類。 (5)同一類型的各個部分的所有分部類的定義都必須在同一程序集或同一模塊(.exe 或 .dll 文件)中進行定義,分部定義不能跨越多個模塊,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,28,二、使用命名空間,1. .NET Framework的常用命名空間 2. 自定義命名空間 3. 引用命名空間中的類,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,29,1. .NET Framework的常用命名空間,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,30,2. 自定義命名空間,一般形式(如下圖) 說明 命名空間名必須遵守C#的命名規(guī)范,命名空間內(nèi)一般由若干個類型組成,例如聲明枚舉型、結(jié)構(gòu)型、接口和類等。 命名空間至少具有兩層,即至少包含兩個分類級別,兩層之間使用句點(.)分隔。典型的命名空間是以公司名稱打頭,后跟部門名稱或技術(shù)名稱。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,31,3. 引用命名空間中的類,引用命名空間中的類有兩種方法: 一是采用完全限定名來引用,例如: new CompanyName.Sales.Customer(); 二是首先通過using關(guān)鍵字導入命名空間,再直接引用,例如: using CompanyName.Sales; new Customer(); 注意,由于命名空間允許嵌套,所包含層次的數(shù)量沒有限制,如果采用完全限定名來引用命名空間中的類,則程序的可讀性將大大下降。在實際編程中,建議采用第二種方法來引用命名空間,相應(yīng)的using語句一般放在.cs源文件的頂部。 實例4-5演示(源代碼參見教材),返回,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,32,4.4 委托,一、委托的概述 二、委托的聲明、實例化與使用 三、委托中的協(xié)變與逆變 四、多路廣播與委托的組合,返回,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,33,一、委托的概述,委托(delegate)是一種引用方法的類型,它與類、接口和數(shù)組相同,屬于引用型。 委托的實質(zhì)是代表方法的引用(即內(nèi)存地址),是定義回調(diào)方法的理想選擇。 委托具有以下特點: (1)委托類似于 C+ 函數(shù)指針,是完全面向?qū)ο蟮模前踩臄?shù)據(jù)類型。 (2)委托允許將方法作為參數(shù)進行傳遞。 (3)委托可用于定義回調(diào)方法。 (4)委托可以鏈接在一起。例如,可以對一個事件調(diào)用多個方法。 (5)委托簽名不需要與方法精確匹配。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,34,二、委托的聲明、實例化與使用,1. 委托的聲明 2. 委托的實例化 3. 調(diào)用委托 4. 使用匿名方法,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,35,1. 委托的聲明,(1) 在C#中使用關(guān)鍵字delegate聲明委托。 (2) 聲明委托的一般形式如下: 訪問修飾符 delegate 返回值類型 委托名(參數(shù)列表); 其中,訪問修飾符與聲明類、接口和結(jié)構(gòu)的訪問修飾符相同,返回值類型是委托所要引用的方法的返回值類型,參數(shù)列表是委托所要引用的方法的形式參數(shù)列表,當所要引用的方法無參數(shù)時,省略參數(shù)列表。 例如:public delegate int Calculate(int x, int y); (3) 注意,在.NET Framework 中,自定義的委托自動從Delegate 類派生,因此不能再從 Delegate 中派生委托。由于委托是密封的,因此也不能從自定義的委托派生。委托類型一般使用默認的構(gòu)造函數(shù)。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,36,2. 委托的實例化,因為委托是一種特殊的數(shù)據(jù)類型,因此必須實例化之后才能用來引用方法。 實例化委托的一般形式如下: 委托類型 委托變量名 = new 委托型構(gòu)造函數(shù)(委托要引用的方法名) 說明,委托類型就是前面使用delegate聲明的委托名。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,37,3. 調(diào)用委托,在實例化委托之后,就可以通過委托對象調(diào)用它所引用的方法。在使用委托對象調(diào)用所引用的方法時,必須保證參數(shù)的類型、個數(shù)、順序和方法聲明匹配。 例如: Calculate cal = new Calculate(Product); int result = cal(3,6); 就表示通過Calculate型的委托對象cal來調(diào)用方法Product,其實參為3和6,因此最終返回并賦給變量result的值為18。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,38,4. 使用匿名方法,C# 2.0引入了匿名方法的概念,它允許將代碼塊作為參數(shù)傳遞,以代替單獨定義的方法。使用匿名方法創(chuàng)建委托對象的一般形式如下: 委托類型 委托變量名 = delegate(參數(shù)列表)代碼塊; 例如: Calculate cal = delegate(int x,int y) return (int)Math.Pow(x, y); ; 就表示用匿名的方法定義了一個Calculate型的委托對象cal,用來計算x的y次方值。 實例4-6演示(源代碼參見教材),2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,39,三、委托中的協(xié)變與逆變,1. 協(xié)變 2. 逆變,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,40,1. 協(xié)變,協(xié)變允許所調(diào)用方法的返回類型可以是委托的返回類型的派生類型,當委托方法的返回類型具有的派生程度比委托簽名更大時,就稱為協(xié)變委托方法。因為方法的返回類型比委托簽名的返回類型更具體,所以可對其進行隱式轉(zhuǎn)換。 例如,已知Students類為Persons類的派生類,Persons類和Students類都是集合類,它們都有一個用來返回第i個元素的方法,聲明格式分別如下: public Person getPerson(int i) public Student getStudent(int i) 現(xiàn)存在一個委托PointPerson,聲明格式如下: public delegate Person PointPerson(int i); 顯然委托PointPerson的簽名與方法getPerson的簽名匹配,可以直接通過該委托對象來調(diào)用方法getPerson,而方法getStudent的返回值類型是委托PointPerson返回值類型的派生類,因此方法getStudent是協(xié)變委托方法。如果通過委托對象來調(diào)用方法getStudent,則系統(tǒng)將進行隱式轉(zhuǎn)換,把getStudent的返回值類型Student轉(zhuǎn)換為Person。,2019/7/11,電子科大成都學院精品課程Visual C# .Net程序設(shè)計,41,2. 逆變,逆變允許將帶有派生參數(shù)的方法用作委托,當委托方法簽名具有一個或多個參數(shù),并且這些參數(shù)的類型派生自方法參數(shù)的類型時,就稱為逆變委托方法。因為委托方法簽名參數(shù)比
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《母親家活動策劃書》課件
- 2024年11月社區(qū)護理試題+答案(附解析)
- 10月高級養(yǎng)老護理員練習題庫及答案(附解析)
- 裝潢設(shè)計在數(shù)碼產(chǎn)品包裝的未來感考核試卷
- 電子節(jié)能照明設(shè)備環(huán)保認證考核試卷
- 教育技術(shù)學的理論基礎(chǔ)
- 臺州網(wǎng)絡(luò)安全運維招聘注意事項信息
- 各國學前教育體系比較研究
- 《復習指南:出師表》課件
- 電力設(shè)備故障預測分析考核試卷
- 廠區(qū)保安培訓試題及答案
- 資質(zhì)掛靠設(shè)計院合同協(xié)議
- 2025年海淀高三二模語文試題及答案
- 新聞記者職業(yè)資格2024年筆試考試題庫含答案
- 2025-2030中國食品中的X射線檢查系統(tǒng)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 豌豆上公主PPT課件
- 艾滋病防治條例PPT課件
- 學生入團申請推薦表
- 當代教育心理學(陳琦劉儒德主編第二版)章節(jié)總結(jié)
- 七年級數(shù)學下冊第5章軸對稱與旋轉(zhuǎn)單元綜合測試卷新版湘教版
- 渡槽設(shè)計計算書
評論
0/150
提交評論