Я все еще не уверен, что полностью понял вопрос. Однако, конечно, невозможно определить один интерфейс, в котором члены интерфейса могут принимать разные имена в зависимости от класса реализации.
Учитывая, что основной целью является одним из охранение — то есть, чтобы обеспечить ошибку во время компиляции, если какой-то класс не в состоянии реализовать все необходимые методы — мне кажется, что ближе всего можно прийти, чтобы провозгласить интерфейс с именами методов общего назначения, а затем каждый конкретный тип реализует этот интерфейс посредством делегирования методам типа.
Например:
interface IOperator
{
int Operation(int a, int b);
float Operation(float a, float b);
decimal Operation(decimal a, decimal b);
}
class Adder : IOperator
{
public int Add(int a, int b){}
public float Add(float a, float b){}
public decimal Add(decimal a, decimal b){}
public int Operation(int a, int b) { return Add(a, b); }
public float Operation(float a, float b) { return Add(a, b); }
public decimal Operation(decimal a, decimal b) { return Add(a, b); }
}
class Subber : IOperator
{
public int Sub(int a, int b){}
public float Sub(float a, float b){}
public decimal Sub(decimal a, decimal b){}
public int Operation(int a, int b) { return Sub(a, b); }
public float Operation(float a, float b) { return Sub(a, b); }
public decimal Operation(decimal a, decimal b) { return Sub(a, b); }
}
К сожалению, это на самом деле не гарантии что каждый тип реализовал методу типа конкретного в вопросе. Но для этого требуется, чтобы каждый тип реализовывал интерфейс, и если у вас есть разработчики в вашей команде, которые каким-либо образом реализовали бы новый метод в интерфейсе, кроме добавления соответствующего класса к классу и последующего вызова его большие проблемы. :)
Мне также кажется неудачным, что этот интерфейс может фактически не использоваться в способе, которым обычно являются интерфейсы: например, для поддержки полиморфной реализации определенного контракта. Но, может быть, вы найдете, когда у вас есть что-то подобное на своем месте, имеет смысл продолжать и обобщать другой код.
В этом случае, если вы доберетесь до этого момента, возможно, вы обнаружите, что имеет смысл просто прекратить записывать эти типы с разными именами методов в каждом типе, учитывая, что на разных типах методы действительно в основном тоже самое. :)
Как бы вы это реализовали? 'class MyClass: T'?! – mihai
@ Mihai well idk, если intellisence достаточно умен, чтобы делать такую вещь .... но похоже, что это не так сложно, чтобы компилятор понял. – Steve
Как насчет делегатов? То же подписи разных реализаций ... – BionicCode