К сожалению, то, что вы пытаетесь сделать, не сработает.
Проблема в том, что базовый объект фактически не реализует ваш интерфейс. Он реализует только конкретный версионный интерфейс, от которого вы пытаетесь уйти.
Поэтому, когда вы приведете свой объект к этому интерфейсу, он потерпит неудачу.
Лучшее, что вы можете сделать в C #, это создать псевдонимы для интерфейса, но, к сожалению, это нужно делать в верхней части каждого файла .cs, который должен использовать этот интерфейс.
Есть ли шанс, что вы могли бы создать объект-оболочку, который бы реализовал ваш интерфейс? Тогда ваш собственный объект будет реализовывать новый интерфейс и передавать каждый вызов обратно соответствующему методу / свойству базового объекта. В этом объекте вы можете делать все виды #if
и аналогичные для обработки различий, но скрывая различия от остальной части вашей программы.
Или вы можете создать два класса, оба реализующих ваш новый интерфейс, и использовать контейнер IoC или аналогичный для запроса «того объекта, который реализует этот интерфейс», не зная, с каким из двух вы на самом деле разговариваете.