para evitar la confusión que resumió algunas código:¿Cómo implementar el polimorfismo genérico en C#?
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
IManager<ISpecificEntity> specificManager = new SpecificEntityManager();
IManager<IIdentifier> manager = (IManager<IIdentifier>) specificManager;
manager.DoStuffWith(new SpecificEntity());
}
}
internal interface IIdentifier
{
}
internal interface ISpecificEntity : IIdentifier
{
}
internal class SpecificEntity : ISpecificEntity
{
}
internal interface IManager<TIdentifier> where TIdentifier : IIdentifier
{
void DoStuffWith(TIdentifier entity);
}
internal class SpecificEntityManager : IManager<ISpecificEntity>
{
public void DoStuffWith(ISpecificEntity specificEntity)
{
}
}
}
Cuando puedo depurar el código me sale un InvalidCastException en Main()
.
Sé que ISpecificEntity
implementa IIdentifier
. Pero, obviamente, un lanzamiento directo de IManager<ISpecificEntity>
en un IManager<IIdentifier>
no funciona.
Pensé que trabajar con la covarianza podría hacer el truco, pero cambiar IManager<TIdentifier>
en IManager<in TIdentifier>
tampoco ayuda.
Entonces, ¿hay alguna forma de convertir specificManager
en IManager<IIdentifier>
?
Gracias y todo lo mejor.
por favor, lea: http://stackoverflow.com/questions/245607/how-is-generic-covariance-contra-variance-implemented-in-c-sharp-4-0 –