class Base
{}
class Sub : Base
{}
void AddNewBase(Base t, LinkedList<Base> list){ ... }
...
{
Sub asub = new Sub();
LinkedList<Sub> asubList = new LinkedList<Sub>();
AddNewBase(asub,asubList) // doesn't work
}
básicamente, tengo una función de inserción personalizado que toma un nuevo elemento y una lista de ponerlo en, y lo hace un poco de materia 'clasificar' para encontrar un buen lugar para ponerlo en el lista.C# polimorfismo en tipos genéricos
problema es que quiero hacer esto basándome en las propiedades en 'Base' así que sería bueno tener solo una función que podría hacer esto para todas las listas de subtipos.
Creo que lo que tipo de deseo es:
static void AddNewBase<T>(T t, LinkedList<T> list){ ... }
pero con cierta forma de clarificar T como: 'donde T es una subclase de base'
No hay plantillas en C#. – dtb
¿qué versión? C# 4 y .NET 4 tienen formas de hacerlo. Las versiones anteriores no tienen. –
En este caso .NET 4.0 no ayuda mucho, porque 'LinkedList' no es covariante ni contravariante. En general, necesita que el tipo genérico sea de "solo lectura" (por ejemplo, "IEnumerable ") o "solo escritura" (por ejemplo, "Acción ") para permitir la covarianza o la contravarianza. –
stevemegson