版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、下面重點(diǎn)說明面向?qū)ο蟮娜齻€(gè)特征.繼承,封裝和多態(tài).C#是一種現(xiàn)代的面向?qū)ο蟮恼Z言.繼承(inheritance):繼承是一個(gè)面向?qū)ο蟮脑~語.說明,一個(gè)類(派生類)能分享,其它類(基類)的特征和行為.派生類和基類是"is a"的關(guān)系.base classes(基類):通?;惪梢宰约簩?shí)例化,或被繼承.派生類繼承基類中的成員,被標(biāo)記為protected或更大的權(quán)限.語法: class (derive class name):(base class name)例子:/基類public class Contact /默認(rèn)私有的字段 str
2、ing name; string email; string address; /構(gòu)造函數(shù) public Contact() / statements . /屬性 public string Name get return nam
3、e; set name = value; public string Email get return email; &
4、#160; set email = value; public string Address get return address;
5、; set address = value; /派生類public class Customer : Contact /自己的私有字段 string gender; decimal income; public Customer()
6、; / statements . 在上面的例子中,Customer 是 Contact的子類,不但,繼承了父類的成員,name,email,address;還有自己的成員,gender,income.abstract classes(抽象類):抽象類是一種特殊的基類.除過普通的類成員,它們還有抽象的類成員.抽象類成員,是不能被實(shí)例化的方法和屬性.所有直接從抽象類派生的類,必須實(shí)現(xiàn)抽象的方法和屬性.抽象類不能被實(shí)例化.例子:/抽象類abstract public class Contact pr
7、otected string name; public Contact() / statements. /抽象方法 public abstract void generateReport(); /抽象屬性 abstract public string Name get; set;
8、; public class Customer : Contact string gender; decimal income; int numberOfVisits; public Customer() / statements public override void generateReport() / un
9、ique report public override string Name get numberOfVisits+; return name; set
10、 name = value; numberOfVisits = 0; public class SiteOwner : Contact int siteHits; string mySite; public SiteOwner() / statemen
11、ts. public override void generateReport() / unique report public override string Name get siteHits+; &
12、#160; return name; set name = value; siteHits = 0; 上面的例子,定義了三個(gè)類.一個(gè)抽象類,兩個(gè)派生類.實(shí)現(xiàn)了父類的方法和屬性."override"修飾符,實(shí)現(xiàn)了抽象類的
13、方法. Calling Base Class Members(調(diào)用基類成員)派生類能調(diào)用基類成員,如果,成員的修飾符是"protected"或更大權(quán)限.在適當(dāng)?shù)纳舷挛臈l件下,好像調(diào)用自己的成員一樣.例子:abstract public class Contact private string address; private string city; private string state; private string zip;
14、; public string FullAddress() string fullAddress = address + 'n' + city + ',' + state + ' ' + zip; return fullAddress; public class
15、Customer : Contact public string GenerateReport() string fullAddress = FullAddress(); / do some other stuff. return fullAddress; 上面的例子中,派生類調(diào)用基類的方法:FullAddress();基類的構(gòu)造函數(shù),可以被派生類調(diào)用,用base().例子:abstract
16、 public class Contact private string address; public Contact(string address) this.address = address; public class Customer : Contact public Customer(string address) : base(address) 例子中,派生類沒有address成
17、員,可以調(diào)用基類的構(gòu)造函數(shù).Hiding Base Class Members(隱藏基類成員)派生類可以和基類有同樣名字的成員.這時(shí),就會(huì)隱藏基類的成員.例子:abstract public class Contact private string address; private string city; private string state; private string zip; public string FullAddress()
18、60; string fullAddress = address + 'n' + city + ',' + state + ' ' + zip; return fullAddress; public class SiteOwner : Contact public string FullAddres
19、s() string fullAddress; / create an address. return fullAddress; 在例子中,派生類和基類有同樣的成員,FullAddress(),當(dāng)調(diào)用時(shí),基類的方法會(huì)被隱藏.盡管基類的成員被隱藏,仍然可以訪問基類的成員,通過,base關(guān)鍵字,調(diào)用基類的引用.例子:abstract public class Contact private st
20、ring address; private string city; private string state; private string zip; public string FullAddress() string fullAddress = address + 'n' + c
21、ity + ',' + state + ' ' + zip; return fullAddress; public class SiteOwner : Contact public string FullAddress() string fullAddress = base.FullAddress(); / do some other stuff.
22、 return fullAddress; 在例子中,派生類調(diào)用基類的成員,用base引用.visioning(版本)例子:using System;public class WebSite public string SiteName; public string URL; public string Description; public WebSite() public WebS
23、ite( string strSiteName, string strURL, string strDescription ) SiteName = strSiteName; URL = strURL; Description = strDescription; public override string T
24、oString() return SiteName + ", " + URL + ", " + Description; public class Contact public string address; pu
25、blic string city; public string state; public string zip; public string FullAddress() string fullAddress = address + 'n' + city + ',' + state +
26、39; ' + zip; return fullAddress; public class SiteOwner : Contact int siteHits; string name; WebSite mySite; public SiteOwner() mySite = new WebSite();
27、60; siteHits = 0; public SiteOwner(string aName, WebSite aSite) mySite = new WebSite(aSite.SiteName, aSite.URL,
28、 aSite.Description); Name = aName; public string Name get siteHits+;
29、160; return name; set name = value; siteHits = 0; public class Test public static void Main()
30、60; WebSite mySite = new WebSite("Le Financier", "http:/www.LeF", "Fancy Financial Site"); SiteOwner anOwner = new SiteOwner("John Doe", mySite); string address;
31、160;anOwner.address = "123 Lane Lane" anOwner.city = "Some Town" anOwner.state = "HI" anOwner.zip = "45678" address = anOwner.Ful
32、lAddress(); / Different Results Console.WriteLine("Address: n0n", address);例子中,派生類用new修飾符,說明,和基類有同樣名字的成員.sealed classed(密封類)密封類是不能被繼承的類.為了避免從一個(gè)類中繼承,就要生成密封類.例子:/密封類public sealed class CustomerStats string gender; decimal income; int nu
33、mberOfVisits; public CustomerStats() public class CustomerInfo : CustomerStats / errorpublic class Customer CustomerStats myStats; / okay例子中,密封類不能被繼承. 封裝(Encapsulation):封裝是一個(gè)面向?qū)ο蟮母拍?對外部世界,隱藏類的內(nèi)部.封裝優(yōu)點(diǎn):1.好的封裝能減少耦合.2.類的內(nèi)部的實(shí)現(xiàn)可以自由改變.3.一個(gè)類有更清楚的接口.Data Hiding(數(shù)據(jù)
34、隱藏):封裝的一個(gè)最有用的形式是數(shù)據(jù)隱藏.一個(gè)類的數(shù)據(jù)表現(xiàn)一個(gè)對象的狀態(tài).修飾符支持封裝:Private:只有類本身能存取.Protected:類和派生類可以存取.Internal:只有同一個(gè)項(xiàng)目中的類可以存取.Protected Internal:是Protected和Internal的結(jié)合. Public:完全存取.other Encapsulating Strategy:(其他封裝策略)屬性和索引器的目的是封裝一個(gè)類的細(xì)節(jié)和給類的用戶提供一個(gè)公共的接口.封裝和繼承的關(guān)系:封裝的意思是包容(聚合),類與類之間的關(guān)系是"has a".一個(gè)類里面有另一個(gè)類.繼承,類與類之間
35、的關(guān)系是"is a".多態(tài)(Polymorphism):就是怎樣重載一個(gè)虛擬類.多態(tài)是面向?qū)ο蟮闹匾拍?Implementing Polymorphism(實(shí)現(xiàn)多態(tài)):例子:using System;public class WebSite public string SiteName; public string URL; public string Description; public WebSite() pu
36、blic WebSite( string strSiteName, string strURL, string strDescription ) SiteName = strSiteName; URL = strURL; Description = strDescription; public override
37、 string ToString() return SiteName + ", " + URL + ", " + Description; abstract public class Contact public virtu
38、al string UpdateNotify() return "Web Site Change Notification" public class Customer : Contact public new string UpdateNotify() return "This is to let you know your favorite site, Financial Tim
39、es,has been updated with new links" public class SiteOwner : Contact WebSite mySite; public SiteOwner(string aName, WebSite aSite) mySite = new WebSite(aSite.SiteName,
40、 aSite.URL, aSite.Description); public new string UpdateNotify() return "This is to let you know your site, " +
41、"n" +mySite.SiteName + ", has been added asa link to Financial Times." public class Test public static void Main() WebSite leFin = new WebSite("Le Financier", "http:/www.LeF", "Fancy Finan
42、cial Site"); Contact Contacts = new Contact2; Contacts0 = new SiteOwner("Pierre Doe", leFin); Contacts1 = new Customer(); foreach (Contact poc in Contacts)
43、160; if (poc is SiteOwner) Console.WriteLine("Message: 0n", (SiteOwner)poc).UpdateNotify(); else
44、 Console.WriteLine("Message: 0n", (Customer)poc).UpdateNotify(); 在例子中,Contact類有個(gè)虛擬方法,有兩個(gè)派生類分別實(shí)現(xiàn).使用了"new"關(guān)鍵字.可以有更有效和優(yōu)雅的方法,實(shí)現(xiàn)它,就是多態(tài).例子:
45、using System;abstract public class Contact public virtual string UpdateNotify() return "Web Site Change Notification" public class Customer : Contact public override string UpdateNotify()
46、;return "This is to let you know your favorite site, Financial Times,has been updated with new links" public class SiteOwner : Contact string siteName; public SiteOwner(string sName) siteName = sName;
47、0;public override string UpdateNotify() return "This is to let you know your site, " + "n" +siteName + ", has been added as a link to Financial Times." public class Test public static void Main()
48、 Contact Contacts = new Contact2; Contacts0 = new SiteOwner("Le Financier"); Contacts1 = new Customer(); foreach (Contact poc in Contacts) Consol
49、e.WriteLine("Message: 0n", poc.UpdateNotify(); 例子中,派生類用"override"實(shí)現(xiàn)了多態(tài).虛擬方法是允許多態(tài)工作的基類的方法.用"override"修飾符說明,能被派生類重載.虛擬方法和抽象方法的不同時(shí),虛擬方法有實(shí)現(xiàn),抽象方法沒有.抽象方
50、法,隱式說明是虛擬,必須被重載;虛擬方法不必被重載.多態(tài),必須是虛擬方法,而且,方法的簽名必須一致,包括方法名稱,參數(shù),和參數(shù)類型.例子:abstract public class Contact public virtual string UpdateNotify() return "Web Site Change Notification" public class Customer : Contact public override string
51、 SendMail() / error public override string UpdateNotify(int number) / error例子中,SendMail不是虛擬方法,故錯(cuò)誤;UpdateNotify,帶有不同的參數(shù),故也錯(cuò)誤.new 和 override 修飾符,都可以實(shí)現(xiàn)新的方法.但,new 實(shí)現(xiàn)的是派生類新的方法.例子:using System;abstract public class Contact public virtual string UpdateNotify() &
52、#160;return "Web Site Change Notification" public class Customer : Contact public new string UpdateNotify() return "This is to let you know yourfavorite site, Financial Times,has been updated with new links" publ
53、ic class SiteOwner : Contact string siteName; public SiteOwner(string sName) siteName = sName; public override string UpdateNotify() return "This is to let you know your site, &quo
54、t; + "n" +siteName + ", has been added asa link to Financial Times." public class Test public static void Main() Contact Contacts = new Contact2; Contacts0 = new SiteOwner("Le Financier");
55、160; Contacts1 = new Customer(); foreach (Contact poc in Contacts) Console.WriteLine("Message: 0n", po
56、c.UpdateNotify(); 結(jié)果是:Message:This is to let you know your site,Le Financier, has been added asa link to Financial Times.Message: Web Site Change Notification例子中,Customer 用"new"實(shí)現(xiàn)新的方法,但是,在運(yùn)行是不是多態(tài).仍然調(diào)用基類的方法.Most-Derived Implementations(多重派生實(shí)現(xiàn))Polymorphic P
57、roperties(多態(tài)的屬性):C#允許,屬性的多態(tài)實(shí)現(xiàn).例子:using System;public class SiteStats public int numberOfVisits = 0;abstract public class Contact protected string name; public virtual string Name get
58、160; return name; set name = value; public class Customer : Contact SiteStats myStats = new SiteStats(); public override string Name
59、 get myStats.numberOfVisits+; Console.WriteLine("Number of visits: 0", m
60、yStats.numberOfVisits); return name; set base.Name = value; myStats.numberOfVisits = 0; Console.WriteLine("Name: 0", Name); public class Test public static void Main() Contact myContact = new Customer();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度海洋資源開發(fā)與保護(hù)合作協(xié)議5篇
- 設(shè)計(jì)院在醫(yī)療領(lǐng)域的科技創(chuàng)新實(shí)踐
- 2025版無產(chǎn)權(quán)儲(chǔ)藏室買賣及售后服務(wù)保障協(xié)議3篇
- 2025年度個(gè)人設(shè)備抵押貸款業(yè)務(wù)合同
- 未來教育趨勢下的學(xué)生心理素質(zhì)培養(yǎng)方向
- 2025年度個(gè)人網(wǎng)絡(luò)借貸平臺(tái)合作協(xié)議書4篇
- 二零二五年度車牌租賃代理服務(wù)合作協(xié)議4篇
- 二零二五年度車位使用權(quán)及物業(yè)管理服務(wù)轉(zhuǎn)讓協(xié)議3篇
- 二零二五年度蟲草市場推廣與銷售支持合同2篇
- 2025年度文化旅游資源承包轉(zhuǎn)讓合同范本3篇
- 8.3+區(qū)域性國際組織+課件高中政治統(tǒng)編版選擇性必修一當(dāng)代國際政治與經(jīng)濟(jì)
- 2025年國網(wǎng)陜西省電力限公司高校畢業(yè)生招聘1100人(第二批)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 藥店員工培訓(xùn)
- 環(huán)衛(wèi)工節(jié)前安全培訓(xùn)
- 2025蛇年春節(jié)放假通知假期溫馨提示模板
- 2024工貿(mào)企業(yè)重大事故隱患判定標(biāo)準(zhǔn)解讀
- 《認(rèn)罪認(rèn)罰案件被追訴人反悔應(yīng)對機(jī)制研究》
- 《工程地質(zhì)》試題及答案四
- 氦離子化色譜法測試電氣設(shè)備油中溶解氣體的技術(shù)規(guī)范
- 內(nèi)燃機(jī)車鉗工(中級)職業(yè)鑒定理論考試題及答案
- 中國聯(lián)合網(wǎng)絡(luò)通信有限公司招聘筆試題庫2024
評論
0/150
提交評論