インターフェイス (C# プログラミング ガイド)
インターフェイスが実装 クラス か 構造体 ができる関連機能のグループの定義が含まれます。
インターフェイスを使用して、クラスにたとえば、複数のソースの動作を含めることができます。この機能は、言語がクラスの多重継承をサポートしていないため、C で重要です。また、別の構造体を実際に継承するか、並べ替えできないため、構造体の継承をシミュレートする場合は、インターフェイスを使用する必要があります。
[インターフェイス] のキーワードを使用してインターフェイスを定義するには、次の例に示すように。
interface IEquatable<T>
{
bool Equals(T obj);
}
クラス、または IEquatable<T> のインターフェイスを実装する構造体でインターフェイスが指定したシグネチャと一致する Equals のメソッドの定義を含める必要があります。その結果、クラスのインスタンスが同じクラスの別のインスタンスと等しいかどうかを判断できる Equals のメソッドを格納するために IEquatable<T> を実装するクラスにカウントできます。
IEquatable<T> の定義は Equalsに実装を提供しません。インターフェイス定義はだけを定義します。このように、では、C のインターフェイスは、すべてのメソッドが抽象クラスの抽象クラスに似ています。ただし、クラスまたは構造体は、複数のインターフェイスを実装するクラスは、はない一つのクラスは、抽象継承できます。したがって、インターフェイス、クラスに複数のソースの動作を含めることができます。
抽象クラスの詳細については、抽象、シール クラスおよびクラス メンバーを参照してください。
インターフェイスは、の 4 のメンバーの型のメソッド、プロパティ、イベント、インデクサー、または組み合わせを指定できます。例については、関連項目を参照してください。インターフェイスには、定数、フィールド、演算子、インスタンス コンストラクター、デストラクター、または型を含めることはできません。インターフェイス メンバーは自動的にパブリックであり、アクセス修飾子を含めることはできません。メンバーは、静的にすることはできません。
インターフェイス メンバーを実装するには、実装クラスの対応するメンバーは、パブリックかつ非静的がインターフェイス メンバーと同じ名前とシグネチャを持っています。
クラスまたは構造体がインターフェイスを実装すると、クラスまたは構造体はインターフェイスに定義されたすべてのメンバーを実装する必要があります。インターフェイス自体は、クラスまたは構造体が基本クラスの機能を継承できる方法で継承できる機能はありません。ただし、基本クラスがインターフェイスを実装する場合、基本クラスから派生したクラスで、その実装を継承します。
次の例では 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# プログラミング ガイド)) を参照してください。
インターフェイスは、他のインターフェイスを実装できます。クラスはを継承または他のインターフェイスが実装するインターフェイスを通じてインターフェイスを複数回を場合があります。基本クラスを通じて含まれます。ただし、クラスはクラス (class ClassName : InterfaceName) の定義の一部としてインターフェイスを宣言する場合にのみ、インターフェイスの実装を提供、1 回だけ。インターフェイスを実装する基本クラスを継承するためにインターフェイスが継承されている場合、基本クラスはインターフェイス メンバーの実装を提供します。ただし、派生クラスは、継承した実装を使用する代わりにインターフェイス メンバーを再実装できます。
基本クラスは、仮想メンバーを使用してインターフェイス メンバーを実装できます。この場合、仮想メンバーをオーバーライドすることにより、派生クラスでインターフェイスの動作を変更できます。仮想メンバーの詳細については、「ポリモーフィズム」を参照してください。
インターフェイスの概要
インターフェイスには、次の特徴があります。
インターフェイスは、抽象基本クラスなどです。クラス、またはインターフェイスを実装する構造体はすべてのメンバーを実装する必要があります。
インターフェイスは直接インスタンス化できません。このメンバーは、インターフェイスを実装するクラスや構造体によって実装されます。
インターフェイスには、イベント、インデクサー、メソッド、およびプロパティを含めることができます。
インターフェイスには、メソッドの実装が含まれません。
クラスまたは構造体は、複数のインターフェイスを実装できます。クラスは、基本クラスを継承し、一つ以上のインターフェイスを実装できます。
このセクションの内容
明示的なインターフェイスの実装 (C# プログラミング ガイド)
インターフェイスに固有のクラス メンバーを作成する方法について説明します。方法: インターフェイス メンバーを明示的に実装する (C# プログラミング ガイド)
インターフェイスのメンバーを明示的に実装する方法の例を示します。方法: 2 つのインターフェイスのメンバーを明示的に実装する (C# プログラミング ガイド)
継承を使用してインターフェイスのメンバーを明示的に実装する方法の例を示します。
関連項目
参考書籍の該当する章
インターフェイス3.0、C の操作: 3.0、C の基本を習得します。