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

C#接口定義及實(shí)例應(yīng)用淺析

開(kāi)發(fā) 后端
C#接口定義是什么呢?C#接口定義相關(guān)的一些內(nèi)容是什么?C#接口定義的學(xué)習(xí)需要注意什么呢?那么本文就向你詳細(xì)介紹這些內(nèi)容。

C#接口定義是什么呢?其實(shí),C#接口定義的就是一種約定,使得實(shí)現(xiàn)接口的類(lèi)或結(jié)構(gòu)在形式上保持一致。個(gè)人覺(jué)得,使用接口可以使程序更加清晰和條理化,這就是接口的好處,但并不是所有的編程語(yǔ)言都支持接口,C#是支持接口的。注意,雖然在概念上,C#接口類(lèi)似于COM接口,但他們的底層結(jié)構(gòu)是不同的。那么,我們來(lái)看一下如何聲明和使用接口。

C#接口定義之聲明接口

聲明接口在語(yǔ)法上和聲明抽象類(lèi)完全相同,例如這里有一個(gè)銀行賬戶的接口:

  1. public interface IBankAccount  
  2. {  
  3. void PayIn(decimal amount);  
  4. bool Withdraw(decimal amount);  
  5.  
  6. decimal Balance  
  7. {  
  8. get;  
  9. }  
  10. }  

注意:接口中只能包含方法、屬性、索引器和事件的聲明。不允許聲明成員上的修飾符,即使是pubilc都不行,因?yàn)榻涌诔蓡T總是公有的,也不能聲明為虛擬和靜態(tài)的。如果需要修飾符,***讓實(shí)現(xiàn)類(lèi)來(lái)聲明。

C#接口定義之使用接口的實(shí)例:

這是書(shū)上的一個(gè)簡(jiǎn)單的例子,但足以說(shuō)明接口的使用方法。

一個(gè)銀行賬戶的接口,兩個(gè)不同銀行賬戶的實(shí)現(xiàn)類(lèi),都繼承于這個(gè)接口。接口聲明如上。下面是兩個(gè)賬戶類(lèi):

  1. class SaverAccount : IBankAccount  
  2. {  
  3. private decimal balance;  
  4.  
  5. public decimal Balance  
  6. {  
  7. get   
  8. {  
  9. return balance;  
  10. }  
  11. }  
  12.  
  13. public void PayIn(decimal amount)  
  14. {  
  15. balance += amount;  
  16. }  
  17.  
  18. public bool Withdraw(decimal amount)  
  19. {  
  20. if (balance >= amount)  
  21. {  
  22. balance -= amount;  
  23. return true;  
  24. }  
  25. Console.WriteLine("Withdraw failed.");  
  26. return false;  
  27. }  
  28.  
  29. public override string ToString()  
  30. {  
  31. return String.Format("Venus Bank Saver:Balance={0,6:C}", balance);  
  32. }  
  33. }  
  34.  
  35. class GoldAccount : IBankAccount  
  36. {  
  37. private decimal balance;  
  38.  
  39. public decimal Balance  
  40. {  
  41. get   
  42. {  
  43. return balance;  
  44. }  
  45. }  
  46.  
  47. public void PayIn(decimal amount)  
  48. {  
  49. balance += amount;  
  50. }  
  51.  
  52. public bool Withdraw(decimal amount)  
  53. {  
  54. if (balance >= amount)  
  55. {  
  56. balance -= amount;  
  57. return true;  
  58. }  
  59. Console.WriteLine("Withdraw failed.");  
  60. return false;  
  61. }  
  62.  
  63. public override string ToString()  
  64. {  
  65. return String.Format(  
  66. "Jupiter Bank Saver:Balance={0,6:C}", balance);  
  67. }  
  68. }  

可見(jiàn),這兩個(gè)實(shí)現(xiàn)類(lèi)多繼承了IBankAccount接口,因此它們必須要實(shí)現(xiàn)接口中的所有聲明的方法。要不然,編譯就會(huì)出錯(cuò)。讓我們來(lái)測(cè)試一下,下面是測(cè)試代碼:

  1. static void Main(string[] args)  
  2. {  
  3. IBankAccount venusAccount = new SaverAccount();  
  4. IBankAccount jupiterAccount = new CurrentAccount();  
  5. venusAccount.PayIn(200);  
  6. jupiterAccount.PayIn(500);  
  7. Console.WriteLine(venusAccount.ToString());  
  8. jupiterAccount.PayIn(400);  
  9. jupiterAccount.Withdraw(500);  
  10. jupiterAccount.Withdraw(100);  
  11. Console.WriteLine(jupiterAccount.ToString());  
  12.  
  13. }  

請(qǐng)注意開(kāi)頭兩句,我們把它們聲明為IBankAccount引用的方式,而沒(méi)有聲明為類(lèi)的引用,為什么呢?因?yàn)?,這樣我們就可以讓它指向執(zhí)行這個(gè)接口的任何類(lèi)的實(shí)例了,比較靈活。但這也有個(gè)缺點(diǎn),如果我們要執(zhí)行不屬于接口的方法,比如這里重載的ToString()方法,就要先把接口的引用強(qiáng)制轉(zhuǎn)換成合適的類(lèi)型了。

C#接口定義之接口的繼承

接口也可以彼此繼承,就象類(lèi)的繼承一樣。比如我們又聲明一個(gè)接口ITransferBankAccount,它繼承于IBankAccount接口。

  1. interface ITransferBankAccount : IBankAccount   
  2. {  
  3. bool TransferTo(IBankAccount destination, decimal amount);  

在這個(gè)接口中,又新增加了一個(gè)方法TransferTo(),所以如果我們要寫(xiě)一個(gè)類(lèi)從ITransferBankAccount繼承的話,就必須要實(shí)現(xiàn)IBankAccount和ITransferBankAccount兩個(gè)接口所有的方法聲明。即:

  1. class CurrentAccount : ITransferBankAccount  
  2. {  
  3. private decimal balance;  
  4.  
  5. public decimal Balance  
  6. {  
  7. get 
  8. {  
  9. return balance;  
  10. }  
  11. }  
  12.  
  13. public void PayIn(decimal amount)  
  14. {  
  15. balance += amount;  
  16. }  
  17.  
  18. public bool Withdraw(decimal amount)  
  19. {  
  20. if (balance >= amount)  
  21. {  
  22. balance -= amount;  
  23. return true;  
  24. }  
  25. Console.WriteLine("Withdraw failed.");  
  26. return false;  
  27. }  
  28.  
  29. public override string ToString()  
  30. {  
  31. return String.Format(  
  32. "Jupiter Bank Saver:Balance={0,6:C}", balance);  
  33. }  
  34.  
  35. public bool TransferTo(  
  36. IBankAccount destination, decimal amount)  
  37. {  
  38. if (Withdraw(amount))  
  39. {  
  40. destination.PayIn(amount);  
  41. return true;  
  42. }  
  43. else 
  44. {   
  45. return false;  
  46. }  
  47. }  
  48. }  

C#接口定義的一些總結(jié):

1、C#中的接口是獨(dú)立于類(lèi)來(lái)定義的。這與 C++模型是對(duì)立的,在 C++中接口實(shí)際上就是抽象基類(lèi)。

2、接口和類(lèi)都可以繼承多個(gè)接口。

3、類(lèi)可以繼承一個(gè)基類(lèi),接口根本不能繼承類(lèi)。這種模型避免了 C++的多繼承問(wèn)題,C++中不同基類(lèi)中的實(shí)現(xiàn)可能出現(xiàn)沖突。因此也不再需要諸如虛擬繼承和顯式作用域這類(lèi)復(fù)雜機(jī)制。C#的簡(jiǎn)化接口模型有助于加快應(yīng)用程序的開(kāi)發(fā)。

4、一個(gè)接口定義一個(gè)只有抽象成員的引用類(lèi)型。C#中一個(gè)接口實(shí)際所做的,僅僅只存在著方法標(biāo)志,但根本就沒(méi)有執(zhí)行代碼。這就暗示了不能實(shí)例化一個(gè)接口,只能實(shí)例化一個(gè)派生自該接口的對(duì)象。

5、接口可以定義方法、屬性和索引。所以,對(duì)比一個(gè)類(lèi),接口的特殊性是:當(dāng)定義一個(gè)類(lèi)時(shí),可以派生自多重接口,而你只能可以從僅有的一個(gè)類(lèi)派生。

C#接口定義以及相關(guān)的內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#接口定義及相關(guān)內(nèi)容有所幫助。

【編輯推薦】

  1. C#實(shí)現(xiàn)string和byte數(shù)組的轉(zhuǎn)換
  2. C# Byte數(shù)組轉(zhuǎn)換String詳解
  3. 詳解C#調(diào)用水晶報(bào)表的實(shí)現(xiàn)
  4. C#水晶報(bào)表數(shù)據(jù)的獲取方法實(shí)例淺析
  5. .Net水晶報(bào)表使用學(xué)習(xí)的九大步驟
責(zé)任編輯:仲衡 來(lái)源: 博客園
相關(guān)推薦

2009-08-27 13:05:06

C#接口特點(diǎn)C#接口實(shí)例

2009-08-27 17:59:56

C#接口定義

2009-08-17 17:49:20

C# 枚舉

2009-08-07 08:53:52

C# ICloneab

2009-09-28 14:45:22

C#接口的定義

2009-08-27 18:09:49

C#接口的實(shí)現(xiàn)

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 17:58:19

C# 泛型集合

2009-08-19 11:28:41

C#操作Word

2009-08-24 10:37:27

C# 泛型

2009-08-27 13:30:11

C# interfac

2009-08-24 11:35:20

C# 泛型應(yīng)用

2009-09-09 13:57:28

C# XML解析

2009-08-18 13:49:21

C# 操作Excel

2009-08-19 17:38:17

C# 操作符分類(lèi)

2009-07-31 16:25:29

C#回調(diào)函數(shù)API應(yīng)用

2009-08-24 15:02:05

C# 類(lèi)型

2009-08-18 10:30:30

C#枚舉

2009-09-01 18:29:24

C#實(shí)現(xiàn)多個(gè)接口

2009-08-31 16:48:02

C#實(shí)現(xiàn)IDispos
點(diǎn)贊
收藏

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