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

總結(jié)和學(xué)習(xí)C#接口

開(kāi)發(fā) 后端
本文介紹了什么是C#接口,以及聲明接口,并且舉了一個(gè)使用C#接口的例子,希望這個(gè)學(xué)習(xí)C#接口的總結(jié)會(huì)對(duì)大家有用。

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

學(xué)習(xí)C#接口:聲明接口

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

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

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

學(xué)習(xí)C#接口:使用C#接口的例子

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

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

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

可見(jiàn),這兩個(gè)實(shí)現(xiàn)類多繼承了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.  

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

接口的繼承

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

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

在這個(gè)接口中,又新增加了一個(gè)方法TransferTo(),所以如果我們要寫(xiě)一個(gè)類從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("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.     }  

總結(jié)起來(lái)說(shuō),使用學(xué)習(xí)C#接口應(yīng)注意幾個(gè)問(wèn)題:

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

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

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

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

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

【編輯推薦】

  1. 配置C#命令行編譯器的步驟介紹
  2. C#連接數(shù)據(jù)庫(kù)的方法簡(jiǎn)介
  3. 如何在C#添加鼠標(biāo)右鍵菜單
  4. .Net Framework中的委托與事件
  5. Observer設(shè)計(jì)模式范例詳解
責(zé)任編輯:book05 來(lái)源: hi.baidu
相關(guān)推薦

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口轉(zhuǎn)換

2009-08-31 18:34:57

C#接口事件

2009-08-13 18:21:52

C#學(xué)習(xí)筆記

2009-08-24 10:31:37

C#接口繼承

2009-08-24 10:06:31

C#接口成員

2009-08-13 18:13:27

C#學(xué)習(xí)經(jīng)驗(yàn)

2009-08-24 10:47:45

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

2009-08-27 16:11:03

C# delegateC# event

2009-09-02 14:14:44

C# COM接口轉(zhuǎn)換

2009-08-10 10:04:25

C#抽象類C#接口

2009-08-11 14:20:41

C# .NET學(xué)習(xí)經(jīng)驗(yàn)

2009-08-13 10:52:03

C#基礎(chǔ)概念

2009-08-21 18:01:32

C#匿名方法

2009-08-12 17:32:44

C#反射方法

2009-08-12 15:55:12

C#接口定義

2009-08-28 16:30:24

C#線程

2009-08-14 17:52:27

C#對(duì)象初始化

2009-08-21 14:16:35

C# New關(guān)鍵字

2009-09-01 13:10:39

C#讀取Word
點(diǎn)贊
收藏

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