Прежде всего, я не думаю, что вы должны разрешать произвольные имена для переопределенных методов - просто определите интерфейс и сделайте его простым.
Вы можете определить интерфейс с методом, который возвращает делегата методу, который выполняет работу.
В противном случае вам просто нужно будет использовать отражение, чтобы получить MethodInfo для сопоставленного метода и проверить во время выполнения, что он имеет правильную подпись.