面向?qū)ο蟮娜齻€(gè)特征繼承,封裝和多態(tài)_第1頁
面向?qū)ο蟮娜齻€(gè)特征繼承,封裝和多態(tài)_第2頁
面向?qū)ο蟮娜齻€(gè)特征繼承,封裝和多態(tài)_第3頁
面向?qū)ο蟮娜齻€(gè)特征繼承,封裝和多態(tài)_第4頁
面向?qū)ο蟮娜齻€(gè)特征繼承,封裝和多態(tài)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論