溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#接口方法的實例介紹

發(fā)布時間:2021-08-25 18:02:44 來源:億速云 閱讀:130 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“C#接口方法的實例介紹”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1.公有方法實現(xiàn)C#接口方法

盡管C#在定義接口時不用指明接口方法的訪問控制方式,但默認(rèn)接口方法均為public型(這可以從反編譯的IL代碼中看到)。下面是使用Reflector查看的接口IL代碼:

class private interface abstract auto ansi IControl{  method public hidebysig newslot abstract virtual instance void Paint() cil managed{  }  }

實現(xiàn)接口的類需要實現(xiàn)所有接口方法。通常情況下,接口的實現(xiàn)方法也為public型。如下案例:

using System ;  interface IControl  {  void Paint();  }  public class EditBox: IControl  {  public void Paint()  {  Console.WriteLine("Pain method is called!");  }  }  class Test  {  static void Main()  {  EditBox editbox = new EditBox();  editbox.Paint();  ((IControl)editbox)。Paint();  }  }

接口就好像是關(guān)系型數(shù)據(jù)庫中的一對多表,一個接口對應(yīng)多個接口方法,每個接口方法又對應(yīng)虛擬方法表(VMT)中的某個公有或私有方法??梢娡ㄟ^接口對方法進(jìn)行調(diào)用需要多出一道轉(zhuǎn)換工作,因此執(zhí)行效率不如直接調(diào)用。

2.私有方法不能實現(xiàn)C#接口方法

如果想將接口方法直接實現(xiàn)為私有方法是辦不到的。下面的EditBox的代碼中Paint方法沒有特殊說明,默認(rèn)為private,導(dǎo)致代碼無法執(zhí)行:

using System ;  interface IControl  {  void Paint();  }  public class EditBox: IControl  {  void Paint()  {  Console.WriteLine("Pain method is called!");  }  public void ShowPaint()  {  this.Paint();  ((IControl)this)。Paint();  }  }  class Test  {  static void Main()  {  EditBox editbox = new EditBox();  editbox.ShowPaint();  }  }

程序在編譯時將顯示如下編譯錯誤:“”EditBox“不會實現(xiàn)接口成員”IControl.Paint()“?!盓ditBox.Paint()“或者是靜態(tài)、非公共的,或者有錯誤的返回類型?!?/p>

由于接口規(guī)范中的方法默認(rèn)的訪問權(quán)限是public,而類中的默認(rèn)訪問權(quán)限是default,也就是說private,因此導(dǎo)致權(quán)限范圍收縮,兩者權(quán)限并不相同,所以必須將類的權(quán)限調(diào)整為public才可以使上面的代碼得以執(zhí)行。

3.實現(xiàn)專門的C#接口方法

using System ;  interface IControl  {  void Paint();  }  public class EditBox: IControl  {  void Paint()  {  Console.WriteLine("Pain method is called!");  }  void IControl.Paint()  {  Console.WriteLine("IControl.Pain method is called!");  }  public void ShowPaint()  {  this.Paint();  ((IControl)this)。Paint();  }  }  class Test  {  static void Main()  {  EditBox editbox = new EditBox();  editbox.ShowPaint();  //editbox.Paint();  ((IControl)editbox)。Paint();  }  }

“C#接口方法的實例介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI