2 つのインターフェイス A、B があります (異なるコンポーネントに存在します)。どちらも同じシグネチャ ( MyMethod
) でメソッドを宣言します。2 つのインターフェイスは、3 番目のインターフェイス (C) によって継承されます。
最初の 2 つのインターフェイス (A、B) で宣言されているメソッドは、(A と B に対して) 常に同じ値を返すことを意図しているため、C から派生するときにインターフェイスを明示的に実装したくありません。
これを達成します。 new-keyword を使用しながら、3 番目のインターフェイスでもメソッドを宣言します。
public interface A {
MyType MyMethod();
}
public interface B {
MyType MyMethod();
}
public interface C : A,B{
new MyType MyMethod();
}
public class ImplementingClass : C{
public MyType MyMethod(){
// do somethin
// return something
}
}
これで予想される問題はありますか、それともスタイルが悪いのでしょうか?
更新
申し訳ありませんが、私の最初の質問は完全なストーリーを示していません。C のインターフェイス参照で MyMethod を呼び出そうとすると、問題が発生します。コンパイラはこれをコンパイルしません。
C aReferenceToC=new CImplementingClass();
aReferenceToC.MyMethod(); // <<< Here the compiler will throw an exception
完全な例
C myCImplementationAsAnInterfaceReference = new MyCImplementation();
myCImplementationAsAnInterfaceReference.MyMethod(); // This does not compile without declaring MyMethod in C with the new-Keyword
MyCImplementation myCImplementationReference= new MyCImplementation();
myCImplementationReference.MyMethod(); // This however will always compile and run
public interface A {
int MyMethod();
}
public interface B {
int MyMethod();
}
public interface C : A, B {
}
public class MyCImplementation : C {
public int MyMethod() {
return 1;
}
}