日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
淺談C#接口方法

1.公有方法實現C#接口方法

創(chuàng)新互聯建站長期為上1000+客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為云和企業(yè)提供專業(yè)的成都做網站、成都網站制作,云和網站改版等技術服務。擁有十多年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

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

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

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

 
 
 
  1. using System ;
  2. interface IControl
  3. {
  4. void Paint();
  5. }
  6. public class EditBox: IControl
  7. {
  8. public void Paint()
  9. {
  10. Console.WriteLine("Pain method is called!");
  11. }
  12. }
  13. class Test
  14. {
  15. static void Main()
  16. {
  17. EditBox editbox = new EditBox();
  18. editbox.Paint();
  19. ((IControl)editbox)。Paint();
  20. }
  21. }

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

2.私有方法不能實現C#接口方法

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

 
 
 
  1. using System ;
  2. interface IControl
  3. {
  4. void Paint();
  5. }
  6. public class EditBox: IControl
  7. {
  8. void Paint()
  9. {
  10. Console.WriteLine("Pain method is called!");
  11. }
  12. public void ShowPaint()
  13. {
  14. this.Paint();
  15. ((IControl)this)。Paint();
  16. }
  17. }
  18. class Test
  19. {
  20. static void Main()
  21. {
  22. EditBox editbox = new EditBox();
  23. editbox.ShowPaint();
  24. }
  25. }

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

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

3.實現專門的C#接口方法

 
 
 
  1. using System ;
  2. interface IControl
  3. {
  4. void Paint();
  5. }
  6. public class EditBox: IControl
  7. {
  8. void Paint()
  9. {
  10. Console.WriteLine("Pain method is called!");
  11. }
  12. void IControl.Paint()
  13. {
  14. Console.WriteLine("IControl.Pain method is called!");
  15. }
  16. public void ShowPaint()
  17. {
  18. this.Paint();
  19. ((IControl)this)。Paint();
  20. }
  21. }
  22. class Test
  23. {
  24. static void Main()
  25. {
  26. EditBox editbox = new EditBox();
  27. editbox.ShowPaint();
  28. //editbox.Paint();
  29. ((IControl)editbox)。Paint();
  30. }
  31. }

當前文章:淺談C#接口方法
本文網址:http://www.5511xx.com/article/dpjpogo.html