日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第十三章、创建接口和定义抽象类

發(fā)布時(shí)間:2024/10/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十三章、创建接口和定义抽象类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  接口不包含任何代碼或數(shù)據(jù):它只規(guī)定了從接口繼承的類必須提供哪些方法和屬性。使用接口,方法的名稱/簽名可以和方法的具體實(shí)現(xiàn)完全隔絕。

  抽象類在許多方面都和接口相似,只是它們可以包含代碼和數(shù)據(jù)。然而,可以將抽象類的某些方法指定為虛方法,指示從抽象類繼承的類必須以自己的方式實(shí)現(xiàn)這些方法。

  理解接口

  接口指定“有什么”,也就是方法的名稱、返回類型和參數(shù)。至于具體“如何做”。或者說(shuō)方法具體如何實(shí)現(xiàn),則不是接口所關(guān)心的。接口描述了類提供的功能,但不描述功能如何實(shí)現(xiàn)。

  定義接口

  定義接口類似于定義類,只是要用interface關(guān)鍵字而不是class關(guān)鍵字。在接口中,要按照與類或結(jié)構(gòu)中一樣的方式聲明方法,只是不允許指定任何訪問(wèn)類型。另外,接口中的方法是沒(méi)有實(shí)現(xiàn)的,它們只是聲明。實(shí)現(xiàn)接口的所有類型都必須提供自己的實(shí)現(xiàn)。所有,方法主體被替換成一個(gè)分號(hào)。如:

  interface IComparable{

  int CompareTo(Object obj);

  }

  Microsoft.NET Framework 文檔建議接口名以大寫(xiě)字母I開(kāi)頭。

  接口不包含任何數(shù)據(jù):不可以向接口添加字段(私有的也不行)。

  實(shí)現(xiàn)接口

  為了實(shí)現(xiàn)接口,需要聲明類或結(jié)構(gòu)從接口繼承,并實(shí)現(xiàn)接口指定的全部方法。雖然不能從一個(gè)結(jié)構(gòu)派生出另一個(gè)結(jié)構(gòu),但結(jié)構(gòu)是可以實(shí)現(xiàn)接口的(從接口“繼承”)。

  interface ILandBound

  {

  int NumberLegs();

  }

  calss Horse:?ILandBound

  {

  ..........

  public int NumberLegs() ? //隱式實(shí)現(xiàn)接口

  {

  return 4;

  }

  }

  實(shí)現(xiàn)接口時(shí),必須保證每個(gè)方法都完全匹配對(duì)應(yīng)的接口方法,具體遵循以下幾個(gè)規(guī)則:

  ①方法名和返回類型完全匹配

  ②所有參數(shù)(包括ref和out關(guān)鍵字修飾符)都完全匹配

  ③用于實(shí)現(xiàn)接口的所有方法都必須具有public可訪問(wèn)性。但是,如果使用顯示接口實(shí)現(xiàn),則不應(yīng)該為方法添加訪問(wèn)修飾符。

  一個(gè)類可以在擴(kuò)展另一個(gè)類的同時(shí)實(shí)現(xiàn)接口。C#用一種位置記號(hào)來(lái)加以區(qū)分。首先寫(xiě)基類名,再寫(xiě)逗號(hào),最后寫(xiě)接口名。如

  interface?ILandBound

  {

  ............

  }

  class Mammal

  {

  .................

  }

  class Horse:Mammal,?ILandBound

  {

  .................

  }

  一個(gè)接口可以從另一個(gè)接口繼承,這在技術(shù)上稱為接口擴(kuò)展。

  使用多個(gè)接口

  一個(gè)類最多只能有一個(gè)基類,但可以實(shí)現(xiàn)不限數(shù)量的接口。

  class Horse:Mammal,?ILandBound,IGrazable

  {

  .....................

  }

  顯示實(shí)現(xiàn)接口

  interface?ILandBound

  {

  int NumberOfLegs(); //幾條腿

  }

  interface IJourney

  {

  int NumberOfLegs();//跑了幾站

  }

  class Horse :?ILandBound,?IJourney

  {

  .......

  int?ILandBound.?NumberOfLegs()

  {

  return 4;

  }

  int?IJourney.?NumberOfLegs()

  {

  return 3;

  }

  }

  如果方法是顯示接口實(shí)現(xiàn)的一部分,就不能為方法指定訪問(wèn)修飾符。

  訪問(wèn)顯示實(shí)現(xiàn)接口的方法,通過(guò)接口引用對(duì)象:

  Horse horse = new Horse();

  .......

  IJourney journeyHorse = horse;

  int legInJourney =?journeyHorse?.NumberOfLegs();

  ILandBound landBoundHorse = horse;

  int legInHorse =?landBoundHorse?.NumberOfLegs();

  接口的限制

  ①不允許在接口中定義任何字段,包括靜態(tài)字段。

  ②不允許在接口中定義任何構(gòu)造器。

  ③不允許在接口中定義任何析構(gòu)器。析構(gòu)器包含由于析構(gòu)(銷毀)對(duì)象實(shí)例的語(yǔ)句。

  ④不允許為任何方法指定訪問(wèn)修飾符

  ⑤不允許在接口中嵌套任何類型(如枚舉、結(jié)構(gòu)、類或接口)。

  ⑥雖然一個(gè)接口能從另一個(gè)接口繼承,但不允許從結(jié)構(gòu)或者類中繼承一個(gè)接口。

  抽象類

  為了明確聲明不允許創(chuàng)建某個(gè)類的實(shí)例,必須將那個(gè)類顯式聲明為抽象類(不能封裝,不允許實(shí)例化對(duì)象),這是用abstract關(guān)鍵字完成的。如:定義一個(gè)草食性哺乳動(dòng)物抽象類

  abstract class GrazingMammal: Mammal,IGrazable

  {

  ........................

  }

  試圖實(shí)例化一個(gè)GrazingMammal對(duì)象,代碼將無(wú)法通過(guò)編譯。

  抽象方法

  抽象類可以包含抽象方法。抽象方法原則上與虛方法相似,只是它不包含方法主體。派生類必須重寫(xiě)(override)這種方法。抽象方法適合在以下情形下使用:一個(gè)方法在抽象類中提供默認(rèn)實(shí)現(xiàn)沒(méi)有意義,但又需要繼承類提供該方法的實(shí)現(xiàn)。

? ?abstract?abstract? ?class GrazingMammal: Mammal,IGrazable

  {

  abstract void DigestGrass(); ?//抽象方法

  ........................

  }

  密封類

  如果不想一個(gè)類作為基類使用,可以使用C#提供的sealed(密封)關(guān)鍵字防止類被用作基類。例如:

  sealed class Horse: GrazingMammal,ILandBound

  {

  ..................

  }

  在密封類中不能聲明任何虛方法,另外抽象類不能密封。

  結(jié)構(gòu)隱式密封。永遠(yuǎn)不能從一個(gè)結(jié)構(gòu)派生。

  密封方法

  可用sealed關(guān)鍵字密封繼承到的虛方法,阻止當(dāng)前類的派生類繼續(xù)重寫(xiě)該方法。只有重寫(xiě)方法才能密封(用sealed override 來(lái)修飾方法)。可像下面這樣理解interface、virtual、override和sealed關(guān)鍵字

  interface(接口)引入方法名稱。

  virtual(虛)是方法的第一個(gè)實(shí)現(xiàn),可由派生類重寫(xiě)。

  override(重寫(xiě))是派生類重寫(xiě)的實(shí)現(xiàn),是方法的第二個(gè)實(shí)現(xiàn)。

  sealed(密封)是方法的最后一個(gè)實(shí)現(xiàn),再下面的派生類不能重寫(xiě)了。

轉(zhuǎn)載于:https://www.cnblogs.com/linhuide/p/5819875.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的第十三章、创建接口和定义抽象类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。