hakeの日記

Windows環境でプログラミングの勉強をしています。

C# - インターフェース

メソッドやプロパティといった外部とのインターフェースの引数や戻り値の形式を予め決めておくもの。メソッドやプロパティの実際の処理は各クラスの定義で行う。
あるインターフェースを継承したクラスは、そのインターフェースで定義したメソッドやプロパティを持つことが保証される。クラスの継承と異なり、複数のインターフェースを継承することができる。

using System;

//インターフェース

interface Adder
{
    double Add(double x, double y);
    double Sub(double x, double y);
}

interface Multiplier
{
    double X {get;}
    double Y {get;}
    double Mul(double x, double y);
}



class MyClass1 : Adder
{
    public double Add(double x, double y)
    {
        return x + y;
    }

    public double Sub(double x, double y)
    {
        return x * y;
    }
}

class MyClass2 : Adder, Multiplier
{
    private double x = 1.0;
    private double y = 1.0;

    public double Add(double x, double y)
    {
        this.x = x;
        this.y = y;
        return x + y;
    }

    public double Sub(double x, double y)
    {
        this.x = x;
        this.y = y;
        return x * y;
    }

    public double X { get{ return this.x; } }
    public double Y { get{ return this.y; } }

    public double Mul(double x, double y)
    {
        this.x = x;
        this.y = y;
        return x * y;
    }


}

class MyMain
{
    static void Main(string[] args)
    {
        MyClass1 m1 = new MyClass1();
        Console.WriteLine(m1.Add(1.0, 2.0)); // 3
        Console.WriteLine(m1.Sub(3.0, 4.0)); // 12

        MyClass2 m2 = new MyClass2();
        Console.WriteLine(m2.Add(1.0, 2.0)); // 3
        Console.WriteLine(m2.Sub(3.0, 4.0)); // 12
        Console.WriteLine(m2.Mul(5.0, 6.0)); // 30
        Console.WriteLine(m2.X);             // 5
        Console.WriteLine(m2.Y);             // 6
    }
}