本文摘自"Introducing Visual C# 2010"(Adam Freeman, Apress, 2010)一書第12章關於介面的內容。
使用介面
介面含有一組用於方法和其它成員的說明。
當一個類別含有在一個介面中定義的所有成員的實現時,稱這個類別實現了一個介面。
在以下章節中,將演示如何定義、實現、及使用介面,並解釋它們與其它C#特性,如抽象類,有何不同。
何時使用介面和基類
基類允許你在派生類中生成共用的行為,當你希望所有類具有同樣的特性並與另一個類相關時,基類是很有用的。你可以在第6章看到相關的示例。
介面允許你跨越無共同先輩的類來生成共同的行為,意即,你可以上溯任何對象,這些對象實現了一個給定介面,並以同樣的代碼處理它們。
定義和使用一個簡單的介面
本節中,我們將考察一個簡單的介面,定義一個實現它的類,並演示如何使用這個類。
定義一個介面
清單12-1含有一個簡單的介面:
1 2 3 4 5 | public interface IBasicCalculator { int CalculateSum( int x, int y); int CalculateProduct( int x, int y); } |
清單12-1中的介面叫做IBasicCalculator。C#中介面命名的約定是遵循Pascal大小寫,並以字母I開頭。你可以在第4章看到一個完整的命名約定列表。
圖12-1描述了這個IBasicCalculator介面。
(註:Modifier —修飾符,Keyword —關鍵詞,Name —介面名,Member Specification —成員說明)
介面用Interface關鍵詞進行定義。你可以對介面運用標準的訪問修飾符,修飾符的操作和類的修飾符相同,詳見第6章的說明。介面最重要的部分是成員說明。清單12-1中,指定了兩個方法:CalculateSum和CalculateProduct。這些說明定義了以兩個int整數為參數並返回一個int結果的兩個方法。介面可以包含其它種類的成員,將在本章稍後涉及。
所有介面的成員說明都隱含為public(公用),意即,你不可以用訪問修飾符來限制對它的訪問。
實現一個介面,一旦已經定義了一個介面,你可以生成實現這個介面的類。
清單12-2含有一個類的示例,它實現了清單12-1所定義的介面。
1 2 3 4 5 | class Calculator : IBasicCalculator { public int CalculateSum( int x, int y) { return x + y; } public int CalculateProduct( int x, int y) { return x * y; } } |
實現一個介面就像從一個基類派生一樣。把一個冒號(:)放在類名之後,並加上你想實現的介面名。
你必須在你的類中提供這個介面中的每個 成員的實現。在這個例子中,為了實現這個IBasicClaculator介面,Calculator類必須提供CalculatorSum和 CalculateProduct成員的實現。你的類可以實現附加的成員,但必須至少要實現這個介面中的所有成員。在實現一個介面中所定義的方法時,你不需要用override關鍵詞。
使用一個介面,當一個類已經實現了一個介面時,從這個類生成的對象可以上溯到這個介面類型,如清單12-3所示。