C# 接口(Interface)

インターフェースは、すべてのクラスがインターフェースを継承する際に従うべき構文契約を定義します。インターフェースは構文契約を定義します。"とは何か"一部、派生クラスは構文契約を定義します。"怎么做"部分。

インターフェースはプロパティ、メソッド、イベントを定義します。これらはすべてインターフェースのメンバーです。インターフェースはメンバーの宣言のみを含みます。メンバーの定義は派生クラスの責任です。インターフェースは派生クラスが従うべき標準構造を提供します。

インターフェースにより、インターフェースを実装するクラスまたは構造体は形式的に一貫性を保ちます。

抽象クラスはある程度インターフェースに似ていますが、基本クラスで宣言された少数のメソッドだけを派生クラスで実装する場合に主に使用されます。

インターフェース自体は機能を実装しません。インターフェースを実装すると宣言したオブジェクトと、どのような動作を実装しなければならないかという契約を結ぶだけです。

抽象クラスは直接インスタンス化できませんが、具体的で実際の機能を持つクラスを派生させることはできます。


インターフェースを定義: MyInterface.cs

接口使用interfaceキーワード宣言は、クラスの宣言に似ています。インターフェース宣言はデフォルトで public です。以下はインターフェース宣言の例です:

interface IMyInterface
{
    void MethodToImplement();
}

上記のコードはインターフェース IMyInterface を定義しています。通常、インターフェースの命名はI文字で始まります。このインターフェースにはメソッド MethodToImplement() が1つだけあり、パラメータも戻り値もありません。もちろん、必要に応じてパラメータと戻り値を設定できます。

注意すべき点は、このメソッドには具体的な実装がないことです。

次に上記のインターフェースを実装します:InterfaceImplementer.cs

实例

using System;

interface IMyInterface
{
        // 接口成员
    void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
    static void Main()
    {
        InterfaceImplementer iImp = new InterfaceImplementer();
        iImp.MethodToImplement();
    }

    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }
}

InterfaceImplementer クラスは IMyInterface インターフェースを実装します。インターフェースの実装はクラスの継承と似た構文形式です:

class InterfaceImplementer : IMyInterface

インターフェースを継承した後、インターフェースのメソッド MethodToImplement() を実装する必要があります。メソッド名はインターフェースで定義されたメソッド名と一致しなければなりません。


接口继承: InterfaceInheritance.cs

以下の例では、IMyInterface と IParentInterface という2つのインターフェースを定義しています。

あるインターフェースが他のインターフェースを継承する場合、実装クラスまたは構造体はすべてのインターフェースのメンバーを実装する必要があります。

以下の例では、IMyInterface は IParentInterface インターフェースを継承しているため、インターフェースの実装クラスは MethodToImplement() と ParentInterfaceMethod() メソッドを実装する必要があります:

实例

using System;

interface IParentInterface
{
    void ParentInterfaceMethod();
}

interface IMyInterface : IParentInterface
{
    void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
    static void Main()
    {
        InterfaceImplementer iImp = new InterfaceImplementer();
        iImp.MethodToImplement();
        iImp.ParentInterfaceMethod();
    }

    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }

    public void ParentInterfaceMethod()
    {
        Console.WriteLine("ParentInterfaceMethod() called.");
    }
}

出力結果は次のとおりです:

MethodToImplement() called.
ParentInterfaceMethod() called.
其他扩展