自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談C#接口方法

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

1.公有方法實現(xiàn)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. }  

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

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

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

如果想將接口方法直接實現(xiàn)為私有方法是辦不到的。下面的EditBox的代碼中Paint方法沒有特殊說明,默認為private,導(dǎo)致代碼無法執(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. }  

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

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

3.實現(xiàn)專門的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#運算符重載學(xué)習(xí)總結(jié)
  3. 概述C#語言的結(jié)構(gòu)體
  4. C#遺傳算法學(xué)習(xí)筆記
  5. 討論C#分部方法
責任編輯:佚名 來源: 博客園
相關(guān)推薦

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#靜態(tài)方法

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#結(jié)構(gòu)

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#數(shù)組結(jié)構(gòu)

2009-08-12 11:24:25

C# String對象

2009-08-19 17:12:18

C# Connecti

2009-08-31 09:37:09

C# Employee

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口轉(zhuǎn)換

2009-08-26 15:46:01

C#匿名類型

2009-08-06 15:30:23

C#類型系統(tǒng)

2009-08-26 13:15:38

C#選擇控制

2009-09-02 15:41:21

C# HTTPWebR
點贊
收藏

51CTO技術(shù)棧公眾號