成人免费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-24 10:06:31

C#接口成員

2009-08-13 18:13:27

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-21 14:16:35

C# New關鍵字

2009-09-01 13:10:39

C#讀取Word
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频久久久 | 国产在线高清 | 国产欧美一级二级三级在线视频 | 午夜激情网 | 亚洲成av人片在线观看无码 | 久久爱一区 | 网址黄 | 欧美色综合 | 影视一区 | 国产乱码精品1区2区3区 | 国产精品日韩欧美一区二区三区 | 天堂视频一区 | 91精品在线观看入口 | 国产综合精品 | 欧美日韩1区2区3区 欧美久久一区 | 91精品一区 | 欧美一区二区免费 | 久久久久国产一区二区三区 | 久久9视频| 九九在线视频 | 98成人网| 日韩一级免费 | 国产精品久久久爽爽爽麻豆色哟哟 | 欧美日本一区 | 天天干天天操天天射 | 中文日韩在线 | 国产xxx在线观看 | 天天干天天爱天天爽 | 欧美精品久久 | 中文字字幕一区二区三区四区五区 | 天天色影视综合 | 国产精品视频二区三区 | 日韩资源 | 免费在线观看一级毛片 | 亚洲一区二区三区在线视频 | 少妇一区在线观看 | 一级毛片在线看 | 日韩精品久久一区二区三区 | 日韩a v在线免费观看 | 久久精品二区 | 久久9热 |