介面 (C# 程式設計手冊)
更新:2007 年 11 月
介面是使用 interface 關鍵字定義的,如下列範例所示:
interface IEquatable<T>
{
bool Equals(T obj);
}
介面會描述屬於任何類別或結構的相關功能群組。介面可以由方法、屬性、事件、索引子或這四種成員型別的任意組合而組成。介面不可以包含欄位。介面成員會自動變成公用的。
當類別或結構繼承介面時,這表示類別或結構會提供介面所定義之所有成員的實作 (Implementation)。與可以繼承的基底類別 (Base Class) 功能相較,介面本身無法提供讓類別或結構繼承的功能。不過,如果基底類別實作了介面,衍生類別 (Derived Class) 就會繼承該實作。
類別和結構 (Struct) 可以繼承自介面,就像類別可以繼承基底類別 (Base Class) 或結構一樣,但是有兩個例外:
類別或結構都可繼承多個介面。
當類別或結構繼承某個介面時,只會繼承方法名稱和簽章 (Signature),因為介面本身不含任何實作 (Implementation)。例如:
public class Car : IEquatable<Car> { public string Make {get; set;} public string Model { get; set; } public string Year { get; set; } // Implementation of IEquatable<T> interface public bool Equals(Car car) { if (this.Make == car.Make && this.Model == car.Model && this.Year == car.Year) { return true; } else return false; } }
若要實作介面成員,對應的類別成員必須是公用、非靜態,而且具有與介面成員相同的名稱和簽章。類別上的屬性和索引子 (Indexer),可以為介面中所定義之屬性或索引子定義額外的存取子。例如,介面可以使用 get 存取子定義屬性,但是實作介面的類別可以同時使用 get 和 set 存取子宣告相同的屬性。不過,如屬性或索引子使用明確實作,則存取子必須相符。
介面和介面成員是抽象的,介面並未提供預設實作。如需詳細資訊,請參閱抽象和密封類別以及類別成員。
IEquatable<T> 介面會向物件使用者表示,此物件可以判斷它是否與同型別的其他物件相等,而介面使用者並不需要知道實作的方式為何。
介面可以繼承其他介面。透過繼承的基底類別或介面,類別可以繼承介面多次。在這種情況下,如果將介面宣告為新類別的一部分,就只能實作介面一次。如果繼承的介面不是宣告為新類別的一部分,則會由負責宣告的基底類別提供實作。基底類別可以使用虛擬成員實作介面成員,在這種情況下,繼承介面的類別可以透過覆寫虛擬成員變更介面行為。如需虛擬成員的詳細資訊,請參閱多型 (C# 程式設計手冊)。
介面概觀
介面有下列屬性:
介面類似於抽象基底類別,繼承介面的任何非抽象型別都必須實作所有成員。
介面無法直接執行個體化。
介面可以包含事件、索引子、方法和屬性。
介面不包含方法實作。
類別或結構都可以繼承自一個以上的介面。
介面本身可繼承自多個介面。
本章節內容
明確介面實作 (C# 程式設計手冊)
說明如何建立介面特有的類別成員。HOW TO:明確實作介面成員 (C# 程式設計手冊)
提供如何明確實作介面成員的範例。HOW TO:使用繼承明確實作介面成員 (C# 程式設計手冊)
提供如何明確使用繼承實作介面成員的範例。
相關章節
介面屬性 (C# 程式設計手冊)
說明如何宣告介面上的屬性。介面中的索引子 (C# 程式設計手冊)
說明如何宣告介面上的索引子。HOW TO:實作介面事件 (C# 程式設計手冊)
說明介面如何宣告事件。類別和結構 (C# 程式設計手冊)
描述 C# 如何使用物件、類別及結構。繼承 (C# 程式設計手冊)
說明 C# 如何實作繼承。方法 (C# 程式設計手冊)
說明 C# 程式撰寫模型 (Programming Model) 中具名方法的概念。多型 (C# 程式設計手冊)
描述類別如何在 C# 中做為一個以上的型別。抽象和密封類別以及類別成員 (C# 程式設計手冊)
描述 abstract 和 sealed 關鍵字如何影響繼承。屬性 (C# 程式設計手冊)
說明 C# 中屬性的概念。事件 (C# 程式設計手冊)
說明 C# 中事件的概念。索引子 (C# 程式設計手冊)
說明 C# 中索引子的概念。