介面與顯式實現介面

2021-07-11 15:02:50 字數 1489 閱讀 4173

鴨子是一種鳥,會游泳,同時又是一種食物。

c# 中所有的類都只能有乙個父類,c#引入了介面(inte***ce)這一概念,並規定「乙個類可以實現多個介面」。

關鍵字inte***ce 用於定義介面。

//定義兩個介面

public inte***ce iswim

public inte***ce ifood

介面可以看成是一種「純」的抽象類,它的所有方法都是抽象方法。抽象類定義了物件所屬的類別,而介面實際上定義了一種物件應具有的行為特性。

然後用與繼承相同的語法定義乙個類實現某些介面:

//定義乙個抽象類

public abstract class bird

//繼承自乙個抽象類,實現兩個介面

public class duck : bird, ifood, iswim

//實現ifood介面

public void cook()

//實現抽象類bird中的抽象方法

public override void fly()

}可按以下公式使用介面:

介面型別名 變數名=new 實現了介面的型別名();

示例**如下:

static void main(string args)

請讀者仔細地閱讀上述**的注釋,由於duck 類繼承自抽象基類bird,又實現了iswim和ifood 兩個介面,所以,duck 物件擁有這三者所定義的所有方法,並且可以賦值給這三種型別的變數。

需要注意的是,雖然程式中始終都只有乙個duck 物件,但將其賦值給不同型別的變數後,其可以使用的方法是不一樣的。

上面講到,某個類可以實現多個介面,當建立乙個此類的物件之後,通過引用這個物件的物件變數可以訪問其所有的公有方法(包括類自身的公有方法以及由介面定義的公有方法)。在這種情況下,根本分不清哪些方法是由介面定義的,哪些是由類自己定義的。c#提供了一種「顯式介面」實現機制,可以區分開這兩種情況,乙個示例**如下:

inte***ce imyinte***ce

public class a:imyinte***ce

public void func2()

}請注意在方法func 前的介面名稱imyinte***ce,這就是c#對介面imyinte***ce 的顯式實現方式。

當類a 顯式實現介面imyinte***ce 之後,只能以下面這種方式訪問介面定義的方法:

imyinte***ce a = new a();

a.func();

以下**將不能通過編譯:

a a = new a();

a.func();

由此得到乙個結論:

如果乙個類顯式實現某個介面,則只能以此介面型別(即imyinte***ce)的變數(即a)為媒介呼叫此介面所定義的方法,而不允許通過類的物件變數直接呼叫。

或者這樣說:被顯式實現的介面方法只能通過介面例項訪問,而不能通過類例項直接訪問。

個人理解為,在類中被顯式實現的介面方法相當於在介面內定義的方法,但是只能在類裡這個位置定義。

C 介面與顯式介面實現

介面 介面包含類或結構可以實現一組相關功能的定義。inte ce iequatable繼承iequatable的類必須實現equals的方法,iequatable不提供equals的實現。介面可以包含方法 屬性 事件 索引器。介面不能包含常量 字段 運算子 例項建構函式 終結器或型別。介面成員會自動...

實現介面與顯式實現介面的區別

在實現介面的時候,vs提供了兩個選單,乙個是 實現介面 乙個是 顯式實現介面 它們到底有何不一樣呢 我們來比較一下看看 1.首先假設我們有乙個介面 public inte ce icustomer 2.如果是 實現介面 那麼 大致如下 public class customer icustomer ...

介面的顯式實現與隱式實現

我們在實現介面時,常常是類繼承介面,然後在介面中實現相應的方法。如下 inte ce ioutput class output ioutput 使用 測試一下實現的結果 可以看到繼承介面的類s的輸出s.output和介面i的輸出i.output是一樣的結果。這是很常見的介面實現方式。那如果我們這樣實...