第56章 インターフェース その1


インターフェースとは、クラスで実装すべきメソッド、プロパティ、インデクサ、イベントなどを示し、それ自身では一切実装しない抽象的な存在です。



インターフェースの宣言は次のように行います。

interface インターフェース名
{
	戻り値の型 メソッド名(パラメータリスト);
	データ型 プロパティの名前{get;set;}
	データ型 this[データ型 インデックス]{get;set;}
	...
}
インターフェースの名前は好きにつけてよいのですが、慣習で大文字のIから始まる名前にすることが多いようです。

インターフェースのメンバは全部自動的にpublicとなります。(アクセス修飾子を自分でつけることはできない)

また、staticなメンバも定義することはできません。

インターフェースは、フィールドを持つことはできません。コンストラクタやデストラクタも持つことはできません。

interface自体にpublic修飾子をつけると、このインターフェースは無条件であらゆるクラスに実装できることになります。

クラスにインターフェースを実装するには、次のようにします。

class クラス名:インターフェース名
{
	...(実装)
}
この場合、インターフェース中のすべてのメンバを実装しなくてはいけません。

複数のインターフェースを実装することも可能です。この場合カンマ(,)で区切ります。

class クラス名:インターフェース1, インターフェース2,...
どうして、インターフェースのようなものが必要なのでしょうか。これは、あらかじめ クラスがどのように振る舞うべきかを定めておくことにより、プログラミングの方向性を指し示す指針となるのです。

難しいことはさておき、インターフェースを作って、実際にこれを実装してみましょう。

// interface01.cs

using System;

public interface IMyInterface
{
    double Pulus(double a, double b);
}

class MyClass : IMyInterface
{
    public double Pulus(double x, double y)
    {
        return x + y;
    }
}

class interface01
{
    public static void Main()
    {
        MyClass mc = new MyClass();
        string strFormat = "{0} + {1} = {2}";

        Console.WriteLine(strFormat, 100, 200, mc.Pulus(100, 200));
        Console.WriteLine(strFormat, 10.5, 12.5, mc.Pulus(10.5, 12.5));
    }
}
インターフェースIMyInterfaceのメンバは、double型の引数を2つ持ち戻り値がdouble型の メソッドPlusを持ちます。

これを見るだけで、IMyInterefaceを実装するクラスは、double型の演算をするクラスなのだなー、と想像できます。

MyClassクラスではIMyInterefaceインターフェースを実装します。

Mainメソッドでは、MyClassのインスタンスを生成して足し算の計算をさせていますね。

実行結果は次のようになります。




[C# Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 01/Oct/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。