成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談C#接口方法

開發 后端
這里介紹C#接口方法,盡管C#在定義接口時不用指明接口方法的訪問控制方式,但默認接口方法均為public型。

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

盡管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. }  

實現接口的類需要實現所有接口方法。通常情況下,接口的實現方法也為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. }  

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

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

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

  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. }  

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

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

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. }  

【編輯推薦】

  1. 介紹Mono C#編譯器
  2. C#運算符重載學習總結
  3. 概述C#語言的結構體
  4. C#遺傳算法學習筆記
  5. 討論C#分部方法
責任編輯:佚名 來源: 博客園
相關推薦

2009-08-25 16:16:43

C# oledbcon

2009-09-02 14:18:08

C#聲明COM接口

2009-08-10 10:04:25

C#抽象類C#接口

2009-02-05 15:32:23

接口委托

2009-08-28 12:25:58

C#靜態方法

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#結構

2025-05-12 03:10:00

接口方法代碼

2011-04-08 09:52:44

C++C#DLL

2009-08-21 10:28:21

C#異步方法C#同步方法

2009-09-07 03:23:40

C# Main方法

2009-08-07 11:26:53

C#數組結構

2009-08-12 11:24:25

C# String對象

2009-08-31 09:37:09

C# Employee

2009-08-19 17:12:18

C# Connecti

2009-08-26 13:15:38

C#選擇控制

2009-08-26 15:46:01

C#匿名類型

2009-08-20 10:24:52

C#開發WinForm

2009-09-02 15:41:21

C# HTTPWebR

2009-08-06 15:30:23

C#類型系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久软件 | 天天干com| 成人三级视频 | 超碰97免费在线 | 99热在这里只有精品 | 久久国产精品视频 | 午夜看片网站 | 久久久www成人免费无遮挡大片 | 丝袜美腿av | 视频在线一区二区 | 欧美日韩国产一区二区三区不卡 | 国产精品成人一区二区 | 欧美成人精品一区二区男人看 | 免费成人在线网 | 一级aaaaaa毛片免费同男同女 | 日日碰狠狠躁久久躁婷婷 | 婷婷狠狠 | 成人精品久久 | 中文字幕免费观看 | 久久精品一区 | 久久精品一区二区 | 亚洲精品久久久久久久久久久久久 | 日韩精品在线免费观看视频 | 雨宫琴音一区二区在线 | 国产亚洲一区二区三区 | 成人天堂噜噜噜 | 国产日韩欧美 | 一级黄色片一级黄色片 | 欧美高清成人 | 久久精品免费一区二区 | 久久成人一区二区三区 | 毛片a级| 国产精品中文字幕在线观看 | 国产精品不卡一区 | 久久久美女 | 99久久精品免费看国产四区 | 淫片一级国产 | 中文字幕欧美一区 | 国产不卡视频在线 | www.av在线| 在线成人免费av |