1. ホーム
  2. c#

同じメソッド名を持つ複数のインターフェイスからの継承

2023-10-01 16:23:47

質問

複数のインターフェースを継承したクラスがあり、それらのインターフェースが同じ名前のメソッドを持っている場合、どのようにこれらのメソッドを私のクラスで実装することができるでしょうか。また、どのインタフェースのどのメソッドを実装するかはどのように指定するのでしょうか?

どのように解決するのですか?

以下のように、明示的にインターフェースを実装することで、解決します。

public interface ITest {
    void Test();
}
public interface ITest2 {
    void Test();
}
public class Dual : ITest, ITest2
{
    void ITest.Test() {
        Console.WriteLine("ITest.Test");
    }
    void ITest2.Test() {
        Console.WriteLine("ITest2.Test");
    }
}

明示的なインターフェイスの実装を使用する場合、その関数はクラス上で公開されません。したがって、これらの関数にアクセスするためには、まずオブジェクトをインターフェース型にキャストするか、インターフェース型として宣言された変数に代入する必要があります。

var dual = new Dual();
// Call the ITest.Test() function by first assigning to an explicitly typed variable
ITest test = dual;
test.Test();
// Call the ITest2.Test() function by using a type cast.
((ITest2)dual).Test();