溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#中怎么定義接口

發(fā)布時(shí)間:2021-07-20 11:09:58 來源:億速云 閱讀:158 作者:Leah 欄目:編程語言

C#中怎么定義接口,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

C#接口定義之聲明接口

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

public interface IBankAccount  {  void PayIn(decimal amount);  bool Withdraw(decimal amount);   decimal Balance  {  get;  }  }

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

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

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

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

class SaverAccount : IBankAccount  {  private decimal balance;   public decimal Balance  {  get   {  return balance;  }  }   public void PayIn(decimal amount)  {  balance += amount;  }   public bool Withdraw(decimal amount)  {  if (balance >= amount)  {  balance -= amount;  return true;  }  Console.WriteLine("Withdraw failed.");  return false;  }   public override string ToString()  {  return String.Format("Venus Bank Saver:Balance={0,6:C}", balance);  }  }   class GoldAccount : IBankAccount  {  private decimal balance;   public decimal Balance  {  get   {  return balance;  }  }   public void PayIn(decimal amount)  {  balance += amount;  }   public bool Withdraw(decimal amount)  {  if (balance >= amount)  {  balance -= amount;  return true;  }  Console.WriteLine("Withdraw failed.");  return false;  }   public override string ToString()  {  return String.Format(  "Jupiter Bank Saver:Balance={0,6:C}", balance);  }  }

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

static void Main(string[] args)  {  IBankAccount venusAccount = new SaverAccount();  IBankAccount jupiterAccount = new CurrentAccount();  venusAccount.PayIn(200);  jupiterAccount.PayIn(500);  Console.WriteLine(venusAccount.ToString());  jupiterAccount.PayIn(400);  jupiterAccount.Withdraw(500);  jupiterAccount.Withdraw(100);  Console.WriteLine(jupiterAccount.ToString());   }

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

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

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

interface ITransferBankAccount : IBankAccount   {  bool TransferTo(IBankAccount destination, decimal amount);  }

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

class CurrentAccount : ITransferBankAccount  {  private decimal balance;   public decimal Balance  {  get {  return balance;  }  }   public void PayIn(decimal amount)  {  balance += amount;  }   public bool Withdraw(decimal amount)  {  if (balance >= amount)  {  balance -= amount;  return true;  }  Console.WriteLine("Withdraw failed.");  return false;  }   public override string ToString()  {  return String.Format(  "Jupiter Bank Saver:Balance={0,6:C}", balance);  }   public bool TransferTo(  IBankAccount destination, decimal amount)  {  if (Withdraw(amount))  {  destination.PayIn(amount);  return true;  }  else {   return false;  }  }  }

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

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

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

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

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

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

關(guān)于C#中怎么定義接口問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI