版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第5章 面向?qū)ο蟮母呒壘幊?.1 類的繼承與多態(tài)性5.2 版本控制5.3 接口 5.4 委托和事件5.5 反射5.6 序列化與反序列化5.1 類的繼承與多態(tài)性封裝:隱藏調(diào)用者不需要了解的信息。繼承:簡化類的設(shè)計。多態(tài):類為名稱相同的方法提供不同實現(xiàn)方式的能力。5.1.1 基類和擴充類 繼承表示現(xiàn)實世界中遺傳關(guān)系的直接模擬。 它表示類之間的內(nèi)在聯(lián)系以及對屬性和操作的共享。5.1.1 基類和擴充類聲明擴充類的語法: 訪問修飾符 class 擴充類名稱:基類名稱 /程序代碼 擴充類繼承了所有定義在基類中數(shù)據(jù)的定義和方法。但是擴充類不繼承基類的構(gòu)造函數(shù)。兩種實現(xiàn)繼承的方式:類繼承和接口繼承。類繼承只允
2、許單一繼承 ,接口可實現(xiàn)多重繼承。被繼承的類叫基類繼承自其他類的類叫擴充類5.1.1 基類和擴充類【例5-1】基類和擴充類的定義及用法。5.1.2 多態(tài)性多態(tài)性是指對象可以表示多個類型的能力。在C#中,多態(tài)性的定義是:同一操作作用于不同的類的實例,不同的類將進行不同的解釋,最后產(chǎn)生不同的執(zhí)行結(jié)果。3種實現(xiàn)多態(tài)性的方法:通過繼承實現(xiàn)多態(tài)性。通過抽象類實現(xiàn)多態(tài)性。通過接口實現(xiàn)多態(tài)性。5.1.2 多態(tài)性1、虛擬方法 在基類中,如果想讓某個方法或者事件被擴充類重寫,可以使用修飾符virtual表明: public virtual void myMethod() /程序代碼 擴充類則用override重
3、寫: public override void myMethod() /程序代碼 5.1.2 多態(tài)(續(xù))使用虛擬方法和重寫方法時,要注意下面幾個方面:虛擬方法不能聲明為靜態(tài)的。Virtual不能和private一起使用。重寫方法的名稱、參數(shù)個數(shù)、類型以及返回值都必須和虛擬方法的一致。5.1.2 多態(tài)(續(xù))【例5-2】重寫基類的方法。5.1.2 多態(tài)(續(xù))2、隱藏基類的方法 在擴充類中,可以使用new關(guān)鍵字來隱藏基類的方法,即使用一個完全不同的方法取代舊的方法。 與方法重寫不同的是,使用new關(guān)鍵字時并不要求基類中的方法聲明為virtual,只要在擴充類的方法前聲明為new,就可以隱藏基類的方法
4、。3.在擴充類直接調(diào)用基類的方法 使用base關(guān)鍵字5.1.2 多態(tài)(續(xù))【例5-3】隱藏基類的方法。5.1.3 抽象類使用abstract修飾符。抽象類只能做基類。抽象類與非抽象類的區(qū)別:第一是抽象類不能直接被實例化,只能在擴充類中通過繼承使用,對抽象類使用new運算符會產(chǎn)生編譯時錯誤。第二個不同點是抽象類可以包含抽象成員,而非抽象類不能包含抽象成員。當(dāng)從抽象類派生非抽象類時,這些非抽象類必須具體實現(xiàn)所繼承的所有抽象成員。5.1.4 密封類密封類是指不能被其他類繼承的類。在C#語言中,使用sealed關(guān)鍵字聲明密封類。sealed關(guān)鍵字也可以限制基類中的方法,防止被擴充類重寫,帶有seale
5、d修飾符的方法稱為密封方法。密封方法同樣不能被擴充類中的方法繼承,也不能被隱藏。5.1.5 繼承過程中構(gòu)造函數(shù)的處理C#在內(nèi)部按照下列順序處理構(gòu)造函數(shù):從擴充類依次向上尋找其基類,直到找到最初的基類,然后開始執(zhí)行最初的基類的構(gòu)造函數(shù),再依次向下執(zhí)行擴充類的構(gòu)造函數(shù),直至執(zhí)行完最終的擴充類的構(gòu)造函數(shù)為止。注意:對于無參數(shù)的構(gòu)造函數(shù),執(zhí)行不會出現(xiàn)問題。如果是帶參數(shù)的構(gòu)造函數(shù),還需要做相應(yīng)的處理。5.1.5 繼承過程中構(gòu)造函數(shù)的處理【例5-5】繼承機制中構(gòu)造函數(shù)的用法。5.2 版本控制 用C#編寫方法時,如果在擴充類中重寫基類的方法,需要用override聲明;要隱藏基類的方法,需要用new聲明,這
6、就是C#進行版本控制的依據(jù)。調(diào)用非虛擬方法時不會受到版本的影響調(diào)用虛擬方法的實現(xiàn)部分可能會因擴充類的重寫而影響執(zhí)行結(jié)果。 5.2 版本控制【例5-6】使用virtual、new與override進行版本控制。5.3 接口 接口的主要特點是只有聲明部分,沒有實現(xiàn)部分。接口成員的實現(xiàn)是通過類完成的。 定義在接口中的方法都是public的。使用interface關(guān)鍵字聲明一個接口。常用的語法是: 訪問修飾符 interface 接口名稱 / 接口體 一般情況下,以大寫的“I”開頭指定接口名,表明這是一個接口。需要在不相關(guān)的類中實現(xiàn)同樣的功能時,可以使用接口。5.3 接口1.接口的聲明與實現(xiàn)【例5-7
7、】接口的聲明與實現(xiàn)。5.3 接口2.顯示方式實現(xiàn)接口注意:顯示實現(xiàn)接口時,不能通過類的實例進行訪問,而必須使用接口實例?!纠?-8】以顯式方式實現(xiàn)接口。5.4 委托和事件1.委托類似與C+中的函數(shù)指針,不同的是C+語言的函數(shù)指針只能夠指向靜態(tài)的方法,而委托除了可以指向靜態(tài)的方法之外,還可以指向?qū)ο髮嵗姆椒?。委托的最大特點是:它不知道或不關(guān)心自己引用的對象的類。委托的應(yīng)用:回調(diào)(CallBack)機制、事件處理。委托的聲明和使用 例如: public delegate void FuncDelegate(string str);委托舉例【例5-9】委托的用法。5.4 委托和事件2.事件事件是響
8、應(yīng)用戶對鼠標(biāo)、鍵盤操作或自動執(zhí)行某個與事件關(guān)聯(lián)的方法的行為。事件和方法一樣具有簽名,簽名包括名稱和參數(shù)列表。事件的簽名通過委托類型來定義,為事件定義委托的常用形式為: public delegate MyEventHandler(Object sender, EventArgs e)事件可以使用event關(guān)鍵字進行聲明,例如: public event MyEventHandler TriggerIt; 若要引發(fā)該事件,可以定義引發(fā)該事件時要調(diào)用的方法,如下例所示: public void Trigger( ) TriggerIt( );可以通過“+=”和“-=”運算符向事件添加委托來訂閱或取
9、消對應(yīng)的事件。事件舉例【例5-10】事件的定義和調(diào)用方法。5.5 反射反射的用途是在程序或裝配件中查找有關(guān)類型的信息,或者從裝配件中讀取元數(shù)據(jù)。反射包含的大多數(shù)類都在System.Reflection命名空間中。常用的類:1Type類:查找有關(guān)類型的相關(guān)信息。獲取指向給定類型的Type對象有2種常用方式:(1)使用C#提供的typeof關(guān)鍵字獲取指定類型的Type對象,例如:Type t = typeof(double);(2)調(diào)用Type類的GetType靜態(tài)方法。 例如:Type t = Type.GetType(System.Double)。2.Assembly類在System.Refl
10、ection命名空間中定義,它允許程序員訪問給定裝配件的元數(shù)據(jù)。5.6 序列化與反序列化序列化 獲取對象并將其狀態(tài)信息轉(zhuǎn)換為可存儲或可傳輸形式的過程。 反序列化 將對象還原回序列化之前的內(nèi)容。序列化和反序列化是一個互逆的過程。.NET Framework提供的兩種序列化技術(shù)二進制序列化:可以保持類型不變,即可以在應(yīng)用程序的不同調(diào)用之間保留對象的狀態(tài)。XML和SOAP序列化:僅序列化公共屬性和字段,不保存類型。5.6 序列化與反序列化1、如何序列化一個類:在類的上方加上Serializable特性即可。 Serializable public class MyClass 2、二進制序列化 MyC
11、lass user = new MyClass(); IFormatter formater = new BinaryFormatter(); Stream stream = new FileStream(UserInfo.bin, FileMode.Create, FileAccess.Write, FileShare.None); formater.Serialize(stream, user); stream.Close(); 特點: 二進制序列化會將一個類的所有成員變量都進行序列化,包括私有變量、公共屬性、方法等。 5.6 序列化與反序列化3、二進制反序列化 IFormatter fo
12、rmatter = new BinaryFormatter(); Stream stream = new FileStream(UserInfo.bin, FileMode.Open, FileAccess.Read, FileShare.Read); MyClass c = (MyClass)formatter.Deserialize(stream); stream.Close();特點:反序列化后,對象c與序列化之前的狀態(tài)完全相同。5.6 序列化與反序列化4、XML序列化(1)XML 序列化僅將對象的公共字段和屬性值序列化為XML流,而不轉(zhuǎn)換方法、索引器、私有字段或只讀屬性(只讀集合除外)
13、。 (2)XML 序列化不包括類型信息,即不能保證序列化后的對象在被反序列化時,變?yōu)橥活愋偷膶ο蟆?(3)XML序列化的實現(xiàn)步驟Class1 user = new Class1();user.AccountName = aa;XmlSerializer mySerializer = new XmlSerializer(typeof(Class1);StreamWriter myWriter = new StreamWriter(UserInfo.xml);mySerializer.Serialize(myWriter, user);myWriter.Close();5.6 序列化與反序列化(4)XML反序列化的步驟Class1 c;XmlSerializer mySerializer = n
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025民用航空運輸行業(yè)市場預(yù)測與技術(shù)演進
- 中班藝術(shù)親子活動策劃方案三篇
- 資信評估合同
- 酒店客房合同書
- 國內(nèi)工業(yè)研發(fā)設(shè)計軟件市場現(xiàn)狀
- 粉刷承包合同
- 部編版七年級道德與法治上冊《1.1.2少年有夢》聽課評課記錄
- 個人黑色奔馳出租合同
- 廚房設(shè)備購銷合同書
- 農(nóng)業(yè)種植項目投資合同
- 2024年新華文軒出版?zhèn)髅焦煞萦邢薰菊衅腹P試參考題庫含答案解析
- 課件:曝光三要素
- 春節(jié)文化研究手冊
- 小學(xué)綜合實踐《我們的傳統(tǒng)節(jié)日》說課稿
- 《鋁及鋁合金產(chǎn)品殘余應(yīng)力評價方法》
- IATF-16949:2016質(zhì)量管理體系培訓(xùn)講義
- 記賬憑證封面直接打印模板
- 人教版八年級美術(shù)下冊全冊完整課件
- 北京房地產(chǎn)典當(dāng)合同
- 檔案工作管理情況自查表
- 畢業(yè)論文-基于51單片機的智能LED照明燈的設(shè)計
評論
0/150
提交評論