C 學習筆記(七) 介面的執行

2021-09-05 14:34:50 字數 3053 閱讀 8752

一、介面的基本概念

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

介面的定義方式與模擬較相似。

inte***ce imyinte***ce

介面成員的定義與類成員的定義之間的區別: 1

.不允許使用訪問修飾符(

public

,private

,protected

或internal

),所有的介面成員都是公共的。 2

.介面成員不能包含**體。 3

.介面不能定義域成員(屬性)。 4

.介面成員不能使用關鍵字

static

,virtual

,abstract

或sealed

來定義。 5

.型別定義成員是禁止的。

如果需要隱藏繼承了基介面的成員,可以使用

new關鍵字來定義它們,例如:

inte***ce imyinte***ce

inte***ce imyderivedinte***ce : imyinte***ce

其執行方式與隱藏繼承的類成員一樣。

在介面中定義的屬性可以確定訪問塊

get和/或

set中的哪乙個能用於該屬性。

inte***ce imyinte***ce

} 注意:介面沒有指定屬性應如何儲存。介面不能指定域,例如用於儲存屬性資料的域。

介面與類一樣,可以定義為類的成員(但與介面的其他成員不同,因為介面不能包含型別定義)。

二、在類中執行介面

執行介面的類必須包含該介面所有成員的執行**,且必須匹配指定的簽名(包括匹配指定的

get和

set塊),並且必須是公共的。

可以使用關鍵字

virtual

或abstract

來執行介面成員,但不能使用

static

或const

。例如:

public

inte***ce imyinte***ce

public

class myclass : imyinte***ce

public

void dosomethingelse()

} 介面成員還可以在基類上執行:

public

inte***ce imyinte***ce

public

class mybaseclass

} public

class myderivedclass : mybaseclass,imyinte***ce

} 即通過另一類中定義相同簽名並且符合實現介面的方法。

繼承乙個執行給定介面的基類,就意味著派生類隱式地支援這個介面,例如:

public

inte***ce imyinte***ce

public

class mybaseclass : imyinte***ce

public

virtual

void dosomethingelse()

} public

class myderivedclass : mybaseclass

} 在基類中把執行**定義為虛擬,派生類就可以替換該執行**,而不是隱藏它們。如果要使用

new關鍵字隱藏乙個基類成員,而不是重寫它,則方法

imyinte***ce.dosomething()

就總是引用基類版本,即使派生類通過這個介面來訪問,也是這樣。

我們用下面這段**測試上邊的介面定義:

mybaseclass a =

new mybaseclass();

a.dosomething();

a.dosomethingelse();

imyinte***ce imi = a;

imi.dosomething();

imi.dosomethingelse();

console.writeline("\n");

myderivedclass b =

new myderivedclass();

b.dosomething();

b.dosomethingelse();

imi = b;

imi.dosomething();

imi.dosomethingelse();

執行結果為:

三、顯示執行介面成員

介面成員也可以由類顯示的執行。如果這麼做,該成員就只能通過介面來訪問,不能通過類來訪問。

public

inte***ce imyinte***ce

public

class mybaseclass : imyinte***ce

public

void dosomethingelse()

} 這樣定義好後我們用如下**進行執行:

mybaseclass a =

new mybaseclass();

a.dosomethingelse();

imyinte***ce imi = a;

imi.dosomething();

imi.dosomethingelse();

大家可以看下面的截圖,對於

dosomething()

我們只能通過介面才能訪問。

類物件訪問不到:

介面物件可以訪問到:

C 學習筆記(七) 介面的執行

一 介面的基本概念 介面的定義方式與模擬較相似。inte ce imyinte ce 介面成員的定義與類成員的定義之間的區別 1 不允許使用訪問修飾符 public private protected 或internal 所有的介面成員都是公共的。2 介面成員不能包含 體。3 介面不能定義域成員 屬...

Go語言學習筆記(七)介面

go語言中的介面作用類似於c 中的虛函式機制,可以提供乙個統一呼叫的方式。介面是雙方約定的一種合作協議。介面實現者不需要關心介面會被怎樣使用,呼叫者也不需要關心介面的實現細節。介面是一種型別,也是一種抽象結構,不會暴露所包含資料的格式 型別及結構。每個介面型別由多個方法組成。type 介面型別名 i...

C 學習筆記之四 介面

關鍵字 inte ce 介面是乙個契約。規定了一組功能。1 介面不能包含實現,只能包含各種簽名 2 介面成員預設public並且無需再顯式新增public 3 實現介面的類必須實現介面的全部成員。4 針對同一介面的不同實現類可以採用不同方法實現介面的成員。可選 訪問修飾符 public 實現不侷限於...