Tenir compte, j'ai les 3 classes/interfaces suivantes:génériques coulée et le type générique
class MyClass<T> { }
interface IMyInterface { }
class Derived : IMyInterface { }
Et je veux être en mesure de jeter un MyClass<Derived>
dans un MyClass<IMyInterface>
ou visa versa:
MyClass<Derived> a = new MyClass<Derived>();
MyClass<IMyInterface> b = (MyClass<IMyInterface>)a;
Mais je reçois des erreurs du compilateur si je tente:
Cannot convert type 'MyClass<Derived>' to 'MyClass<IMyInterface>'
Je suis sûr qu'il ya une très bonne nouvelle pourquoi je ne peux pas faire cela, mais je ne peux pas penser à un. Pour ce que je veux faire - Le scénario que j'imagine est celui dans lequel vous voulez idéalement travailler avec une instance de MyClass<Derived>
afin d'éviter beaucoup de lancers méchants, mais vous devez passer votre instance à une instance de MyClass<Derived>
. interface qui accepte MyClass<IMyInterface>
.
Donc, ma question est double:
- Pourquoi ne puis-je pas jeté entre ces deux types?
- Existe-t-il un moyen de garder la gentillesse de travailler avec une instance de
MyClass<Derived>
tout en étant capable de transformer ceci enMyClass<IMyInterface>
?