インターフェイス
C#のインターフェイスはJavaのインターフェイスと基本的には同じだが、異なる部分もある。
まず、C#のインターフェイスには定数が記述できない。更に、ネストした型を宣言することも出来ない。
前者は許せるのだが、後者は慣れが必要そうだ。まぁC#にはinternalがあるから、ネストさせるよりinternalにしろ、ということなのかもしれない。
また、publicやabstract、virtualといったものも使用できない*1。
インターフェイスに記述できるものとして、メソッドのほかにプロパティやインデクサ*2も記述できる。
インターフェイスは、既存のインターフェイスから拡張させたり、複数の既存のインターフェイスを結合させたりできる。拡張と結合の違いは、インターフェイスが単体(拡張)か複数(結合)かだけなので、どちらも拡張でいいじゃんとか思ったり思わなかったり。
インターフェイスを拡張、結合する際は
interface IHoge {} interface IExHoge : IHoge {}
のように記述する。
インターフェイスを実装するには、
interface IHoge { void Method(); } class Hoge : IHoge { public void Method() { Console.WriteLine("Method"); } }
のように記述する。ここでHogeクラスのMethodメソッドにvirtualを付けるとHogeクラスを継承した際、このメソッドがオーバーライドできるが、付けないと隠蔽となる。
インターフェイスを通してメソッドを呼び出す際、
IHoge h = new Hoge();
h.Method();
のように記述する。