Share via


介面 (C# 程式設計手冊)

介面包含 類別結構 可實作相關功能的定義。

您可以使用介面,在類別中,例如,包括來自於多重來源的行為。 因為語言不支援類別,多重繼承該功能是重要的屬性。 此外,您必須使用介面,如果您要模擬結構的繼承,,因為無法從其他結構實際上繼承或類別。

如下列範例所示,您可以使用 介面 關鍵字,您定義介面。

interface IEquatable<T>
{
    bool Equals(T obj);
}

任何類別或實作 IEquatable<T> 介面的結構必須包含符合簽章指定介面的 Equals 方法的定義。 因此,您在實作 IEquatable<T> 方法包含 Equals 類別的執行個體可以判斷的類別可以計算它是否與另一個相同類別的執行個體是否相等。

IEquatable<T> 的定義為 Equals不會提供的實作。 介面會定義只有簽章。 以這種方式,介面在 C# 類似於所有方法是抽象的抽象類別。 不過,類別或結構可以實作多個介面,不過,類別可以繼承只有單一類別,摘要。 因此,您可以使用介面,在中,您可以將多個來源的行為。

如需抽象類別的詳細資訊,請參閱 抽象和密封類別和類別成員

介面可包含方法、屬性、事件、索引子,或者這些四個成員型別的任何組合。 如需範例的連結,請參閱 相關章節。 介面不能包含常數、欄位、運算子、執行個體建構函式、解構函式或型別。 介面成員會自動是公用的,因此,它們不能包含任何存取修飾詞。 成員不能是 靜態

若要實作介面成員,實作的類別中對應的成員必須是公用,非靜態的,而且具有相同名稱和簽章與介面成員。

當類別或結構實作介面時,類別或結構必須為的所有成員提供實作介面來定義。 介面不提供類別或結構可繼承就像它可以繼承基底類別的功能。 不過,,如果基底類別實作介面,從基底類別衍生的任何類別繼承該實作。

下列範例顯示 IEquatable<T> 介面的實作。 實作的類別,則為 Car,必須提供 Equals 方法的實作。

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;
    }
}

類別的屬性和索引子可能定義在介面中定義的屬性或索引子的額外的存取子。 例如,介面可以宣告為具有 取得 存取子的屬性。 實作介面的類別可以宣告 get 和 集合 存取子中的相同屬性。 不過,如屬性或索引子使用明確實作,則存取子必須相符。 如需明確實作的詳細資訊,請參閱 明確介面實作 (C# 程式設計手冊)介面屬性 (C# 程式設計手冊)

介面可以實作其他介面。 類別可能包含介面多次將繼承的基底類別 (Base Class) 或透過其他介面實作的介面。 不過,類別可以提供介面的實作只會執行一次,而且,只有在類別介面宣告為類別的一部分 (class ClassName : InterfaceName) 的定義。 如果介面繼承,因為您繼承了實作介面的基底類別,基底類別提供介面成員的實作。 然而,衍生類別可以實作介面成員而不是使用繼承的實作。

使用虛擬成員,基底類別也實作介面成員。 在這種情況下,衍生類別可以透過覆寫虛擬成員的方式變更介面行為。 如需虛擬成員的詳細資訊,請參閱多型 (C# 程式設計手冊)

摘要的介面

介面有下列屬性:

  • 介面是像抽象基底類別。 任何類別或實作介面的結構都必須實作它所有的成員。

  • 介面無法直接執行個體化。 它的成員會由任何實作介面的類別或結構實作。

  • 介面可以包含事件、索引子、方法和屬性。

  • 介面不包含方法實作。

  • 類別或結構可以實作多個介面。 類別可以繼承基底類別也實作一個或多個介面。

本章節內容

相關章節

精選書籍章節

介面學習 C# 3.0:對 C# 3.0 基本

請參閱

參考

繼承 (C# 程式設計手冊)

概念

C# 程式設計手冊