溫馨提示×

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

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

一文讀懂C#中的(Interface)接口

發(fā)布時(shí)間:2020-11-06 16:02:18 來(lái)源:億速云 閱讀:164 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

一文讀懂C#中的(Interface)接口?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

定義

在 C# 語(yǔ)言中,類(lèi)之間的繼承關(guān)系僅支持單重繼承,而接口是為了實(shí)現(xiàn)多重繼承關(guān)系設(shè)計(jì)的。一個(gè)類(lèi)能同時(shí)實(shí)現(xiàn)多個(gè)接口,還能在實(shí)現(xiàn)接口的同時(shí)再繼承其他類(lèi),并且接口之間也可以繼承。無(wú)論是表示類(lèi)之間的繼承還是類(lèi)實(shí)現(xiàn)接口、接口之間的繼承,都使用“:”來(lái)表示。

接口定義了屬性、方法和事件,這些都是接口的成員。接口只包含了成員的聲明。成員的定義是派生類(lèi)的責(zé)任。接口提供了派生類(lèi)應(yīng)遵循的標(biāo)準(zhǔn)結(jié)構(gòu)。接口定義了語(yǔ)法合同 "是什么" 部分,派生類(lèi)定義了語(yǔ)法合同 "怎么做" 部分。

定義接口語(yǔ)法:

interface  接口名稱(chēng)
{
    接口成員;
}

接口命名通常以 I 字母開(kāi)頭,例如Itest。

接口成員,不允許使用 public、private、protected、internal 訪(fǎng)問(wèn)修飾符,不允許使用 static、virtual、abstract、sealed 修飾符。不能定義字段,定義的方法不能包含方法體。

示例:定義一本書(shū)的接口,有id、名稱(chēng)name、定價(jià)price幾個(gè)屬性,和一個(gè)方法售賣(mài)價(jià)SalePrice()。

using System;
 
namespace app
{
 interface IBook
 {
 int Id { get; set; }
 string Name { get; set; }
 double Price { get; set; }
 double SalePrice(int discount);
 }
}  

實(shí)現(xiàn)

接口的實(shí)現(xiàn)與類(lèi)的繼承語(yǔ)法格式類(lèi)似,也是重寫(xiě)了接口中的方法,讓其有了具體的實(shí)現(xiàn)內(nèi)容。

實(shí)現(xiàn)接口語(yǔ)法:

class  類(lèi)名 : 接口名
{
    //類(lèi)中的成員以及實(shí)現(xiàn)接口中的成員
}

在實(shí)現(xiàn)接口的成員時(shí)有兩種方式,隱式實(shí)現(xiàn)接口成員和顯式實(shí)現(xiàn)接口成員。隱式實(shí)現(xiàn)接口成員是將接口的所有成員以 public 訪(fǎng)問(wèn)修飾符修飾。顯式實(shí)現(xiàn)接口是指在實(shí)現(xiàn)接口時(shí)所實(shí)現(xiàn)的成員名稱(chēng)前含有接口名稱(chēng)作為前綴。

下面對(duì)一本書(shū)的接口分別使用隱式實(shí)現(xiàn)和顯式實(shí)現(xiàn)。

隱式實(shí)現(xiàn):

class Book:IBook
 {
 // 隱式的實(shí)現(xiàn)接口中的屬性
 public int Id { get; set; }
 public string Name { get; set; }
 public double Price { get; set; }
 
 // 隱式實(shí)現(xiàn)接口中的方法
 public double SalePrice(int discount)
 {
  double salePrice = Price * discount * 0.1;
   return salePrice;
 }
 
 }

隱式實(shí)現(xiàn)后進(jìn)行運(yùn)行:

class Program
{
 static void Main(string[] args)
 {
 Book book = new Book();
 book.Id = 1001;
 book.Name = "tynam";
 book.Price = 60;
 
 Console.WriteLine("id:{0}" , book.Id);
 Console.WriteLine("書(shū)名:{0}" , book.Name);
 Console.WriteLine("定價(jià):{0}", book.Price);
 Console.WriteLine("售賣(mài)價(jià):{0}", book.SalePrice(8));
 }
}

運(yùn)行后結(jié)果:

id:1001
書(shū)名:tynam
定價(jià):60
售賣(mài)價(jià):48

顯式實(shí)現(xiàn):

class Book:IBook
{
 public double Price { get; set; }
 // 顯示的實(shí)現(xiàn)接口中的屬性
 int IBook.Id { get; set; }
 string IBook.Name { get; set; }
 
 // 顯式實(shí)現(xiàn)接口中的方法
 double IBook.SalePrice(int discount)
 {
 double salePrice = Price * discount * 0.1;
   return salePrice;
 }
 
} 

顯式實(shí)現(xiàn)后進(jìn)行運(yùn)行:

class Program
{
 static void Main(string[] args)
 {
 Book book = new Book();
 IBook bookDetail = book;
 bookDetail.Id = 1001;
 bookDetail.Name = "tynam";
 bookDetail.Price = 60;
 
 Console.WriteLine("id:{0}" , bookDetail.Id);
 Console.WriteLine("書(shū)名:{0}" , bookDetail.Name);
 Console.WriteLine("定價(jià):{0}", bookDetail.Price);
 Console.WriteLine("售賣(mài)價(jià):{0}", bookDetail.SalePrice(8));
 }
}

運(yùn)行后結(jié)果:

id:1001
書(shū)名:tynam
定價(jià):60
售賣(mài)價(jià):48

注意:接口無(wú)法直接進(jìn)行實(shí)例化。 其成員由實(shí)現(xiàn)接口的任何類(lèi)或結(jié)構(gòu)來(lái)實(shí)現(xiàn)。

多態(tài)

使用接口實(shí)現(xiàn)多態(tài) 需要滿(mǎn)足以下兩個(gè)條件。

定義接口并使用類(lèi)實(shí)現(xiàn)了接口中的成員。

創(chuàng)建接口的實(shí)例指向不同的實(shí)現(xiàn)類(lèi)對(duì)象。

示例:定義一個(gè)接口名稱(chēng)為 IBird,分別定義兩個(gè)實(shí)現(xiàn)類(lèi) Phoenix 和 Duck 來(lái)實(shí)現(xiàn)接口的成員,代碼如下。

interface IBird
 {
 void fly();
 }
 
 class Phoenix : IBird
 {
 public void fly()
 {
  Console.WriteLine("鳳凰會(huì)飛");
 }
 }
 
 class Duck : IBird
 {
 public void fly()
 {
  Console.WriteLine("鴨子也會(huì)飛");
 } 
 }

實(shí)例化后執(zhí)行:

class Program
{
 static void Main(string[] args)
 {
  IBird phoenix = new Phoenix();
  phoenix.fly();
  IBird duck = new Duck();
  duck.fly();
 }
}

執(zhí)行結(jié)果:

鳳凰會(huì)飛
鴨子也會(huì)飛

看完上述內(nèi)容,你們掌握一文讀懂C#中的(Interface)接口的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

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

AI