E 'possibile "upcast" da una classe generica basata su T, in una classe generica basata su qualcosa di più generale di T?Upcasting con un parametro di tipo generico
Ad esempio, supponiamo di avere una classe denominata Derived
che eredita da una classe denominata Base
. Posso mai fare qualcosa di simile:
List<Derived> der = new List<Derived>();
List<Base> bas = (List<Base>) der;
O, utilizzando interfacce, è mai possibile fare qualcosa del genere:
List<MyClonableType> specific = new List<MyClonableType>();
List<IClonable> general = (List<IClonable>)specific;
Come scritto qui, ognuno di questi esempi non riesce con un InvalidCastException
. La domanda che stiamo discutendo è se sia effettivamente impossibile, o semplicemente un errore di sintassi che potrebbe essere risolto se sapessimo come.
Java ha ' extends X>' per questo tipo di costrutto, Sarei sorpreso che C# non abbia un equivalente – Romain
C# ha vincoli generici (la parola chiave where) per la stessa cosa che estende, ma I ' Non è positivo questo è ciò che Auraseer cerca. Vuole effettivamente utilizzare la varianza sulla collezione dal suo aspetto. –
@Romain, il cast non è valido in C#, ma è possibile definire un metodo come "void Process (Elenco in cui T: Base {...}' –
finnw