Следующая ситуация:
Интерфейс объявляет 2 метода, которые выполняют одно и то же действие с разными параметрами.
interface IX
{
string DoTheThing(A a);
string DoTheThing(B b);
}
Теперь объекты A могут быть преобразованы в B с некоторыми затратами и наоборот.
Таким образом, мы могли бы хотеть использовать абстрактный класс вместо интерфейса, который бы выглядел примерно так:
abstract class X
{
public virtual string DoTheThing(A a) { return DoTheThing(a.ConvertToB()); }
public virtual string DoTheThing(B b) { return DoTheThing(b.ConvertToA()); }
}
Таким образом, подкласс должен реализовывать только 1 из методов, если требуется.
Однако он также должен реализовать хотя бы один из них, в противном случае мы получаем бесконечную рекурсию.
Теперь возникает вопрос, должен ли я сделать один из методов абстрактным и обеспечить реализацию?
Проблема в том, что мне нужно выбрать один из методов, и он может быть неправильным для
некоторые из подклассов и приводят к большему количеству конверсий.
Итак, второй вопрос о том, что мне не хватает лучшего решения по некоторым языковым функциям или лучше
дизайнерские решения (или я обдумываю это)?
P.S Я работаю с C #, но ответ не должен ограничиваться C #.