- インターフェイスは、多重継承を実現できる参照型です。
- インターフェイス内で宣言できるのは「抽象」メンバーのみであるため、インターフェイスを直接インスタンス化することはできません。
- インターフェイスには、メソッド、プロパティ、イベント、インデクサーなどのメンバーを含めることができます。
- インターフェイス名の先頭には文字「I」を使用するのが一般的です (必須ではなく、別の方法で宣言することもできます)。
- インターフェイス内のメンバーのアクセス権はデフォルトでパブリックなので、インターフェイスを定義するときにインターフェイス メンバーにアクセス修飾子を指定する必要はありません。指定しない場合、コンパイラはエラーを報告します。
- インターフェイス メンバーを宣言する場合、メンバーの定義時にメンバーの名前とパラメーターを指定する限り、インターフェイス メンバー用の特定の実行可能コードを記述することはできません。
- インターフェイスが実装される (クラスによって継承される) と、派生クラス自体が抽象クラスでない限り、派生クラスはインターフェイス内のすべてのメンバーを実装する必要があります。
インターフェースを宣言する
C# でインターフェイスを宣言するには、interface キーワードを使用する必要があります。文法構造は次のとおりです。
public interface InterfaceName{
returnType funcName1(type parameterList);
returnType funcName2(type parameterList);
… …
}
このうち、InterfaceName はインターフェイス名、returnType は戻り値の型、funcName はメンバー関数の名前、parameterList はパラメーターのリストです。
[例] 以下に、具体的な例を通してインターフェースの使用方法を示します。
use system;
namespace it-kiso.com
{
public interface Iwebsite{
void setValue(string str1, string str2);
void disPlay();
}
public class Website : Iwebsite{
public string name, url;
public void setValue(string n, string u){
name = n;
url = u;
}
public void disPlay(){
Console.WriteLine("{0} {1}", name, url);
}
}
class Demo
{
static void Main(string[] args)
{
Website web = new Website();
web.setValue("IT基礎", "https://it-kiso.com");
web.disPlay();
}
}
}
操作の結果は次のようになります。
IT基礎 https://it-kiso.com
インターフェースの継承
C# では、インターフェイスは別のインターフェイスを継承できます。たとえば、インターフェイス 1 を使用してインターフェイス 2 を継承できます。クラスを使用してインターフェイス 1 を実装する場合、インターフェイス 1 とインターフェイス 2 のすべてのメンバーを同時に実装する必要があります。以下に例を示します。
using System;
namespace it-kiso.com
{
public interface IParentInterface
{
void ParentInterfaceMethod();
}
public interface IMyInterface : IParentInterface
{
void MethodToImplement();
}
class Demo : IMyInterface
{
static void Main(string[] args)
{
Demo demo = new Demo();
demo.MethodToImplement();
demo.ParentInterfaceMethod();
}
public void MethodToImplement(){
Console.WriteLine("IMyInterface インターフェースの MethodToImplement 関数を実装します");
}
public void ParentInterfaceMethod(){
Console.WriteLine("IParentInterface インターフェースの ParentInterfaceMethod 関数を実装します");
}
}
}
操作の結果は次のようになります。
IMyInterface インターフェースの MethodToImplement 関数を実装します
IParentInterface インターフェースの ParentInterfaceMethod 関数を実装します