2008年1月23日水曜日

[.NET]interfaceのインプリメント

C#やJavaなどオブジェクト指向言語の大半は、Interfaceという機構を持ちます。
C#の場合、以下のようになります。

public interface Interface1 { int getData(); }


コレをインプリメントすると、

public class Imple1 : Interface1
{
    public int getData() { return 1; }
}


のようになります。Interfaceは複数インプリメントできるので、

public class Imple1 : Interface1Interface2{...}


のように実装することができます。ところが、この複数のインタフェースで

  • メソッド名が同じ
  • 引数が同じ
  • 戻り値が異なる

といったオーバーロードが発生するケースがあります。この場合、C#では



public class Imple : Interface1Interface2
{
    int Interface1.getData() { return 1; }
    string Interface2.getData() { return "1"; }

    public long getData()
    {
        return 1L;
    }
}


のようにして解決します。で、使うほうはというと、そのタイプにキャストして実行することになります。

Imple imp = new Imple();
long l = imp.getData();
int i = ((Interface1)imp).getData();
string s = ((Interface2)imp).getData();


知りませんでした。。。

0 件のコメント: