问题描述
我的项目有很多接口,但它们的计算方法相互重叠:
public interface Interface1
{
public double CalcStuff( int x );
}
public interface Interface2
{
public double CalcStuff( int x );
}
public interface InterfaceJoined : Interface1,Interface2
{
}
public class ClassJoined : InterfaceJoined
{
public double CalcStuff( int x ) { return x*x; }
}
我希望将实现类分配为所有三个接口Interface1,Interface2,InterfaceJoined
。
Interface1 calculator1 = new ClassJoined( );
Interface2 calculator2 = new ClassJoined( );
InterfaceJoined calculatorJoined = new ClassJoined( );
double result1 = calculator1.CalcStuff( 20 ); // works
double result2 = calculator2.CalcStuff( 20 ); // works
double resultJoined = calculatorJoined.CalcStuff( 20 ); // "the call is ambiguous between the following methods or properties"
我希望接口具有相同的实现。此处无需区分。我该如何实现?这是个糟糕的主意吗?
致谢和问候。
解决方法
我唯一能想到的是将接口的显式默认方法实现与通过Interface1.CalcStuff
关键字隐藏Interface2.CalcStuff
和new
方法相结合:
public interface InterfaceJoined : Interface1,Interface2
{
double Interface1.CalcStuff(int x) => CalcStuff(x);
double Interface2.CalcStuff(int x) => CalcStuff(x);
new double CalcStuff(int x);
}