インターフェースの宣言は次のように行います。
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のインスタンスを生成して足し算の計算をさせていますね。
実行結果は次のようになります。
Update 01/Oct/2006 By Y.Kumei