C# インターフェースのサンプル(interface)

C#のインターフェースのサンプルです。

確認環境
・Microsoft Visual Studio Community 2017

目次

説明 インターフェースとは
サンプル クラスが複数のインターフェースを実装する
  クラスがクラスの継承とインターフェースの実装を行う
  インターフェースが他のインターフェースを継承する

インターフェースとは

アクセス修飾子  interface  インターフェース名  {
     抽象メソッド
}
  • インターフェースの宣言は、「interface」を記述します。
  • 抽象メソッドは、継承先でメソッドのオーバーライドを強制します。
  • 抽象メソッドは、メソッドの定義はしますが、処理内容は記述しません。
    →処理の概要を表すといえます。
    →処理内容は、抽象クラスを継承したクラスで記述します。
  • インターフェースは他のインターフェースを継承できます。

インターフェースを実装する書き方

アクセス修飾子  class  クラス名  :  インターフェース名{
}
  • インターフェース名の前に、コロン「:」を付けます。
  • インターフェースを継承してクラスを定義することを「インターフェースを実装する」と言います。
  • 1つのクラスに複数のインターフェースを実装することができます。その場合カンマで区切って記述します。

インターフェースのサンプルです。

using System;

namespace Project1
{
    public interface ItestA
    {
        void print1();
    }

    public class Class1: ItestA
    {
        void ItestA.print1()
        {
            Console.WriteLine("red");
        }
    }
    class TestA
    {
        static void Main()
        {
            ItestA c1 = new Class1();
            c1.print1(); //red
        }
    }
}

5~8行目は、インターフェースです。
7行目は、抽象メソッドです。
10行目は、5行目のインターフェースを実装しています。
12行目は、7行目の抽象メソッドをオーバーライドしています。

クラスが複数のインターフェースを実装する

クラスは、複数のインターフェースを実装できます。

using System;

namespace Project1
{
    public interface ItestA
    {
        void print1();
    }
    public interface ItestB
    {
        void print2();
    }
    public class Class1: ItestA,ItestB
    {
        void ItestA.print1()
        {
            Console.WriteLine("red");
        }
        void ItestB.print2()
        {
            Console.WriteLine("blue");
        }
    }
    class TestA
    {
        static void Main()
        {
            ItestA c1 = new Class1();
            c1.print1(); //red
            ItestB c2 = new Class1();
            c2.print2(); //blue
        }
    }
}

13行目のクラスは、5行目と9行目のインターフェースを実装しています。

クラスがクラスの継承とインターフェースの実装を行う

クラスは、クラスの継承とインターフェースの実装を一緒にできます。

using System;

namespace Project1
{
    public interface ItestA
    {
        void print1();
    }
    public class ClassTest
    {
    }
    public class Class1: ClassTest,ItestA
    {
        void ItestA.print1()
        {
            Console.WriteLine("red");
        }
    }
    class TestA
    {
        static void Main()
        {
            ItestA c1 = new Class1();
            c1.print1(); //red
        }
    }
}

12行目は、クラスの継承とインターフェースの実装を行っています。

インターフェースが他のインターフェースを継承する

インターフェースは、他のインターフェースを継承できます。

using System;

namespace Project1
{
    public interface ItestA
    {
        void print1();
    }
    public interface ItestB:ItestA
    {
        void print2();
    }
    public class Class1: ItestB
    {
        void ItestA.print1()
        {
            Console.WriteLine("red");
        }
        void ItestB.print2()
        {
            Console.WriteLine("blue");
        }
    }
    class TestA
    {
        static void Main()
        {
            ItestA c1 = new Class1();
            c1.print1(); //red
            ItestB c2 = new Class1();
            c2.print2(); //blue
        }
    }
}

9行目は、インターフェースがインターフェースを継承しています。

関連の記事

C#入門 クラスの仕組みとサンプル
C# コンストラクタのサンプル
C# クラスの継承の仕組みとサンプル
C# オーバーライドのサンプル
C# オーバーロードのサンプル

△上に戻る