C 實現介面的例項解析

2021-06-16 05:07:15 字數 1374 閱讀 2707

c#實現介面的例項解析之前我們來看看c#介面的定義,如果乙個類派生於乙個介面,它就會執行某些函式。並不是所有的物件導向語言都支援介面,所以本節將詳細介紹c#實現介面的問題。

c#實現介面注意:

熟悉com的開發人員應注意,儘管在概念上c#介面類似於com介面,但它們是不同的,底層的結構不同,例如,c#介面並不派生於iunknown。c#介面根據.net函式提供了乙個契約。與com介面不同,c#介面不代表任何型別的二進位制標準。

下面列出microsoft預定義的乙個介面system.idisposable的

完整定義。idisposable包含乙個方法dispose(),該方法由類執行,用於清理**:

public inte***ce idisposable   

上面的**說明,宣告介面在語法上與宣告抽象類完全相同,但不允許提供介面中任何成員的執行方式。一般情況下,介面中只能包含方法、屬性、索引器和事件的宣告。

c#實現介面中不能例項化介面,它只能包含其成員的簽名。介面不能有建構函式(如何構建不能例項化的物件)或字段(因為這隱含了某些內部的執行方式)。介面定義也不允許包含運算子過載,但這不是因為宣告它們在原則上有什麼問題,而是因為介面通常是公共契約,包含運算子過載會引起一些與其他.net 語言不相容的問題,例如與vb.net的不相容,因為vb.net不支援運算子過載。

在介面定義中還不允許宣告成員上的修飾符。介面成員總是公共的,不能宣告為虛擬或靜態。如果需要,就應由執行的類來宣告,因此最好通過執行的類來宣告訪問修飾符,就像上面的**那樣。

例如idisposable。如果類希望宣告為公共型別,以便執行方法dispose(),該類就必須執行idisposable。在c#中,這表示該類派生於idisposable。

class someclass : idisposable  

// rest of class  

}

在這個例子中,如果someclass派生於idisposable,但不包含與idisposable中簽名相同的dispose()實現**,就會得到乙個編譯錯誤,因為該類破壞了實現idisposable的契約。當然,編譯器允許類有乙個不派生於idisposable的dispose() 方法。問題是其他**無法識別出someclass支援idisposable特性。

c#實現介面注意:

idisposable是乙個相當簡單的介面,它只定義了乙個方法。大多數介面都包含許多成員。

介面的另乙個例子是c#中的foreach迴圈。實際上,foreach迴圈的內部工作方式是查詢物件,看看它是否實現了 system.collections.ienumerable介面。如果是,c#編譯器就插入il**,使用這個介面上的方法迭代集合中的成員,否則,foreach就會引發乙個異常。

C 介面的隱式實現解析和例項

介面就是一種協議也就是我們通常所說的 標準 或者 規定 介面定義了可由類和結構實現的協定。介面不提供所定義的成員的實現 僅指定必須由實現介面的類或結構提供的成員。介面使得介面中的方法的識別符號和方法的具體實現相隔絕。首先類和結構是先繼承介面然後再對其進行實現的。介面成員方法實現時 方法名和返回型別必...

C 介面 介面的實現

c 定義了介面後,就要在子類中實現。c 中通常把子類和父類的關係稱為繼承,子類和介面的關係稱為實現。子類可以繼承乙個父類,可以實現多個介面。介面中不能定義建構函式,所以介面不能例項化。下面我們看例子 using system public inte ce ichoose public class t...

關於介面的例項

關於介面 inte ce singer class student implements singer void study public class animal public static void main string args student ss1 new student singer ...