C# インターフェイス
インターフェース
C#で抽象化を実現させるもう一つの方法は、インターフェイスを使用することです。
interface
は完全に "抽象クラス"であり、抽象メソッドとプロパティ(本体は空です)のみを含めることができます。
例
{.language-java .techis-white}
// interface
interface Animal
{
void animalSound(); // interface method (does not have a body)
void run(); // interface method (does not have a body)
}
インターフェースの先頭を文字「I」で始めることは、自分や他の人がそれがクラスではなくインターフェースであることを覚えやすくするため、良い習慣と考えられています。
デフォルトでは、インターフェースのメンバーはabstract
とpublic
です。
注:インターフェイスにはプロパティとメソッドを含めることができますが、フィールドは含めることができません。
インターフェイスメソッドにアクセスするには、インターフェイスが別のクラスによって "実装" (継承のようなもの)されている必要があります。インターフェイスを実装するには、:
記号を使用します(継承と同様)。インターフェイスメソッドの本体は、"implement"クラスによって提供されます。を使用する必要はありません。インターフェイスを実装するときoverride
キーワードは使う必要がないことに注意して下さい。
例
{.language-java .techis-white}
// Interface
interface IAnimal
{
void animalSound(); // interface method (does not have a body)
}
// Pig "implements" the IAnimal interface
class Pig : IAnimal
{
public void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
}
}
インターフェイスに関する注意事項
抽象クラスと同様に、インターフェイスを使用してオブジェクトを作成することはできません (上記の例では、Program クラスに「IAnimal」オブジェクトを作成することはできません)。
- インターフェイス メソッドには本体がありません。本体は「実装」クラスによって提供されます。
- インターフェイスの実装では、そのすべてのメソッドをオーバーライドする必要があります。
- インターフェイスにはプロパティとメソッドを含めることができますが、フィールド/変数は含めることはできません
- インターフェイス メンバーはデフォルトで
abstract
とpublic
です。 - インターフェイスにコンストラクターを含めることはできません (オブジェクトの作成には使用できないため)。
インターフェイスを使用する理由とタイミング
1) セキュリティを実現するには、特定の詳細を非表示にして、オブジェクト (インターフェース) の重要な詳細のみを表示します。
2) C#は、「多重継承」をサポートしていません(クラスは1つの基本クラスからしか継承できません)。しかし、インターフェイスを使用することで、クラスが複数のインターフェイスを実装することができるため、これを実現することができます。
注:複数のインターフェイスを実装するには、カンマで区切ります(以下の例を参照)。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。