91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#接口怎么聲明和實現

發布時間:2021-12-03 09:57:19 來源:億速云 閱讀:319 作者:iii 欄目:編程語言

這篇文章主要講解了“C#接口怎么聲明和實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#接口怎么聲明和實現”吧!

學習C#接口:聲明接口

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

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

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

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

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

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

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);      }  }

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

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());   }

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

接口的繼承

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

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

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

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#接口應注意幾個問題:

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

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

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

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

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

感謝各位的閱讀,以上就是“C#接口怎么聲明和實現”的內容了,經過本文的學習后,相信大家對C#接口怎么聲明和實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌黎县| 礼泉县| 钟祥市| 宽甸| 泊头市| 大田县| 阳春市| 天全县| 荔波县| 宜丰县| 霍林郭勒市| 扎囊县| 台前县| 白朗县| 高碑店市| 大荔县| 锡林郭勒盟| 满洲里市| 宁明县| 农安县| 广饶县| 施秉县| 吉木乃县| 灵丘县| 临沭县| 屏山县| 永胜县| 泸溪县| 富平县| 正安县| 稻城县| 鹿邑县| 庆安县| 阿拉善盟| 深水埗区| 元朗区| 团风县| 石楼县| 通渭县| 微山县| 肃北|