Я никогда не сталкивался с этой проблемой до сегодняшнего дня и задавался вопросом, какой конвенцией/лучшей практикой для достижения такого поведения было бы.
Основная настройка:
public interface IDispatch {
void Dispatch();
}
public class Foo : IDispatch {
void IDispatch.Dispatch() {
DoSomething();
}
}
public class Bar : Foo {
...
}
Бар нуждается в подклассе Foo, потому что он обладает всеми теми же свойствами, что и Bar plus, представляет два новых, с которыми мне нужно столкнуться. Проблема в том, что Foo также нуждается в немного другой реализации Dispatch(). Обычно это было бы переопределено, но это не относится к методу интерфейса, так что это прекрасно, просто чтобы Bar реализовать IDispatch, так что мое определение класса выглядит следующим образом:
public class Bar : Foo, IDispatch { .... }
а затем просто выполните явную реализацию этого интерфейса в Bar? Мой компилятор, похоже, не жалуется, когда я пытаюсь сделать это таким образом, но я не был уверен, вызовет ли он какие-либо проблемы во время выполнения, какие реализации использовать в будущем, или если есть лучший способ добиться чего-то подобного.
Также стоит упомянуть, что на моем рабочем месте мы используем генерацию кода из UML-моделей, которая предусматривает, что дизайн всех классов должен выполняться сначала из модели. Инструмент генерации кода - это то, что заставляет методы интерфейса быть реализованы явно (не хочу обсуждать плюсы и минусы этого именно того, к чему я вынужден заниматься прямо сейчас, поэтому наличие неявной реализации не является вариантом)