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

總結和學習C#接口

開發 后端
本文介紹了什么是C#接口,以及聲明接口,并且舉了一個使用C#接口的例子,希望這個學習C#接口的總結會對大家有用。

什么是C#接口?其實,接口簡單理解就是一種約定,使得實現接口的類或結構在形式上保持一致。個人覺得,使用接口可以使程序更加清晰和條理化,這就是接口的好處,但并不是所有的編程語言都支持接口,C#是支持接口的。注意,雖然在概念上,C#接口類似于COM接口,但他們的底層結構是不同的。那么,我們來看一下如何聲明和使用接口。

學習C#接口:聲明接口

聲明接口在語法上和聲明抽象類完全相同,例如這里有一個銀行賬戶的接口:  

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

注意:接口中只能包含方法、屬性、索引器和事件的聲明。不允許聲明成員上的修飾符,即使是pubilc都不行,因為接口成員總是公有的,也不能聲明為虛擬和靜態的。如果需要修飾符,***讓實現類來聲明。

學習C#接口:使用C#接口的例子

這是書上的一個簡單的例子,但足以說明接口的使用方法。

一個銀行賬戶的接口,兩個不同銀行賬戶的實現類,都繼承于這個接口。接口聲明如上。下面是兩個賬戶類:

  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("Jupiter Bank Saver:Balance={0,6:C}", balance);  
  66.     }  

可見,這兩個實現類多繼承了IBankAccount接口,因此它們必須要實現接口中的所有聲明的方法。要不然,編譯就會出錯。讓我們來測試一下,下面是測試代碼:

  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.  

請注意開頭兩句,我們把它們聲明為IBankAccount引用的方式,而沒有聲明為類的引用,為什么呢?因為,這樣我們就可以讓它指向執行這個接口的任何類的實例了,比較靈活。但這也有個缺點,如果我們要執行不屬于接口的方法,比如這里重載的ToString()方法,就要先把接口的引用強制轉換成合適的類型了。

接口的繼承

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

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

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

  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("Jupiter Bank Saver:Balance={0,6:C}", balance);  
  32.     }  
  33.  
  34.     public bool TransferTo(IBankAccount destination, decimal amount)  
  35.     {  
  36.         if (Withdraw(amount))  
  37.         {  
  38.             destination.PayIn(amount);  
  39.             return true;  
  40.         }  
  41.         else 
  42.         {   
  43.             return false;  
  44.         }  
  45.     }  

總結起來說,使用學習C#接口應注意幾個問題:

1、C#接口是獨立于類來定義的。這與 C++模型是對立的,在 C++中接口實際上就是抽象基類。

2、接口和類都可以繼承多個接口。

3、類可以繼承一個基類,接口根本不能繼承類。這種模型避免了 C++的多繼承問題,C++中不同基類中的實現可能出現沖突。因此也不再需要諸如虛擬繼承和顯式作用域這類復雜機制。C#的簡化接口模型有助于加快應用程序的開發。

4、一個接口定義一個只有抽象成員的引用類型。C#中一個接口實際所做的,僅僅只存在著方法標志,但根本就沒有執行代碼。這就暗示了不能實例化一個接口,只能實例化一個派生自該接口的對象。

5、接口可以定義方法、屬性和索引。所以,對比一個類,接口的特殊性是:當定義一個類時,可以派生自多重接口,而你只能可以從僅有的一個類派生。

【編輯推薦】

  1. 配置C#命令行編譯器的步驟介紹
  2. C#連接數據庫的方法簡介
  3. 如何在C#添加鼠標右鍵菜單
  4. .Net Framework中的委托與事件
  5. Observer設計模式范例詳解
責任編輯:book05 來源: hi.baidu
相關推薦

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口轉換

2009-08-31 18:34:57

C#接口事件

2009-08-13 18:21:52

C#學習筆記

2009-08-24 10:31:37

C#接口繼承

2009-08-13 18:13:27

C#學習經驗

2009-08-24 10:06:31

C#接口成員

2009-08-24 10:47:45

C#接口重實現

2009-08-27 16:11:03

C# delegateC# event

2009-09-02 14:14:44

C# COM接口轉換

2009-08-13 10:52:03

C#基礎概念

2009-08-21 18:01:32

C#匿名方法

2009-08-11 14:20:41

C# .NET學習經驗

2009-08-12 17:32:44

C#反射方法

2009-08-10 10:04:25

C#抽象類C#接口

2009-08-12 15:55:12

C#接口定義

2009-08-28 16:30:24

C#線程

2009-08-14 17:52:27

C#對象初始化

2009-08-14 10:16:57

C#運算符重載

2009-08-21 14:16:35

C# New關鍵字
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩久久 | 97国产精品 | 黑人巨大精品欧美一区二区免费 | 国产污视频在线 | 国产精品麻 | 亚洲一区二区中文字幕在线观看 | 欧美一级毛片久久99精品蜜桃 | 51ⅴ精品国产91久久久久久 | 伊人狠狠| 毛片入口 | 99精品视频一区二区三区 | 国产精品久久久久久久久婷婷 | 中文字幕第一页在线 | 91视频观看| 国产色黄 | 亚洲精品国产一区 | 欧美一区二区激情三区 | 古典武侠第一页久久777 | 色综合色综合色综合 | 日韩一区二区三区在线观看 | 日本高清视频在线播放 | 午夜精品久久久久久久久久久久久 | 久久这里只有 | 毛片免费看的 | 黄色一级毛片 | 日韩三级精品 | 亚洲精品亚洲人成人网 | 成人av免费在线观看 | 狠狠草视频 | 日韩在线观看中文字幕 | 精品国产免费人成在线观看 | 武道仙尊动漫在线观看 | 高清黄色毛片 | 精品一区二区三区在线视频 | 欧美一级免费看 | 另类二区| 在线观看av网站 | 久久亚洲国产 | 伊人中文字幕 | 精品乱人伦一区二区三区 | 亚洲电影第三页 |