Учтите, у меня есть следующие 3 класса / интерфейса:
class MyClass<T> { }
interface IMyInterface { }
class Derived : IMyInterface { }
И я хочу иметь возможность разыграть MyClass<Derived>
в MyClass<IMyInterface>
или наоборот:
MyClass<Derived> a = new MyClass<Derived>();
MyClass<IMyInterface> b = (MyClass<IMyInterface>)a;
Но я получаю ошибки компилятора, если я пытаюсь:
Cannot convert type 'MyClass<Derived>' to 'MyClass<IMyInterface>'
Я уверен, что есть очень веская причина, почему я не могу этого сделать, но я не могу думать об этом.
Что касается того, почему я хочу сделать это - сценарий, который я представляю, - это такой сценарий, в котором вы в идеале хотите работать с экземпляром MyClass<Derived>
, чтобы избежать множества неприятных приведений, однако вам нужно передать свой экземпляр интерфейс, который принимает MyClass<IMyInterface>
.
Так что мой вопрос двоякий:
- Почему я не могу кастовать между этими двумя типами?
- Есть ли способ сохранить изящество в работе с экземпляром
MyClass<Derived>
, но при этом можно преобразовать его в MyClass<IMyInterface>
?