Betrachten habe ich die folgenden drei Klassen/Schnittstellen:Casting Generika und der generische Typ
class MyClass<T> { }
interface IMyInterface { }
class Derived : IMyInterface { }
Und ich will ein MyClass<Derived>
in ein MyClass<IMyInterface>
oder Visum versa werfen können:
MyClass<Derived> a = new MyClass<Derived>();
MyClass<IMyInterface> b = (MyClass<IMyInterface>)a;
Aber ich Compiler-Fehler, wenn ich versuche:
Cannot convert type 'MyClass<Derived>' to 'MyClass<IMyInterface>'
ich bin sicher, dass es eine sehr gute re Warum kann ich das nicht, aber ich kann mir keinen vorstellen.
Warum ich das machen möchte - Das Szenario, das ich mir vorstelle, ist eines, bei dem Sie idealerweise mit einer Instanz von MyClass<Derived>
arbeiten möchten, um viele böse Würfe zu vermeiden, jedoch müssen Sie Ihre Instanz an eine übergeben Schnittstelle, die MyClass<IMyInterface>
akzeptiert.
So ist meine Frage zweierlei:
- Warum kann ich nicht zwischen diesen beiden Typen werfen?
- Gibt es eine Möglichkeit, die Nettigkeit des Arbeitens mit einer Instanz von
MyClass<Derived>
beizubehalten und trotzdem in eineMyClass<IMyInterface>
zu werfen?