¿Es posible "upcast" de una clase genérica basada en T, en una clase genérica basada en algo más general que T?Upcasting con un parámetro de tipo genérico
Por ejemplo, supongo que tengo una clase llamada Derived
que hereda de una clase llamada Base
. ¿Puedo volver a hacer algo como esto:
List<Derived> der = new List<Derived>();
List<Base> bas = (List<Base>) der;
O bien, el uso de interfaces, es que siempre que sea posible hacer algo como esto:
List<MyClonableType> specific = new List<MyClonableType>();
List<IClonable> general = (List<IClonable>)specific;
Como está escrito aquí, cada uno de estos ejemplos falla con un InvalidCastException
. La pregunta sobre la que estamos discutiendo es si es realmente imposible, o simplemente un error de sintaxis que podría corregirse si supiéramos cómo.
Java tiene '' para este tipo de construcción, Me sorprendería que C# no tenga un equivalente. – Romain
C# tiene restricciones genéricas (la palabra clave where) para lo mismo que extends, pero I ' No estoy seguro de que eso es lo que busca Auraseer. Él quiere usar la varianza en la colección por lo que parece. –
@Romain, ese molde no es válido en C#, pero puede definir un método como 'nulo Proceso (Lista lista) donde T: Base {...}' –
finnw