日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
總結(jié)和學(xué)習(xí)C#接口

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

成都創(chuàng)新互聯(lián)公司專注于達(dá)州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供達(dá)州營銷型網(wǎng)站建設(shè),達(dá)州網(wǎng)站制作、達(dá)州網(wǎng)頁設(shè)計、達(dá)州網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造達(dá)州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供達(dá)州網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

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

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

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

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

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

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

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

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

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

 
 
 
  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引用的方式,而沒有聲明為類的引用,為什么呢?因?yàn)?,這樣我們就可以讓它指向執(zhí)行這個接口的任何類的實(shí)例了,比較靈活。但這也有個缺點(diǎn),如果我們要執(zhí)行不屬于接口的方法,比如這里重載的ToString()方法,就要先把接口的引用強(qiáng)制轉(zhuǎn)換成合適的類型了。

接口的繼承

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

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

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

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

總結(jié)起來說,使用學(xué)習(xí)C#接口應(yīng)注意幾個問題:

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

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

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

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

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


新聞標(biāo)題:總結(jié)和學(xué)習(xí)C#接口
文章鏈接:http://m.5511xx.com/article/cdhdojc.html