Recibo un error al intentar agregar un objeto genérico a una lista <>.No se puede convertir de tipo genérico a interfaz
Probablemente esté relacionado con la covarianza y la contradicción pero no estoy seguro de cómo solucionar esto. Intenté restringir mis tipos genéricos usando donde T: IRegister.
Tengo una interfaz para representar un registro y luego dos clases que representan un ByteRegister y un DoubleWordRegister.
public interface IRegister
{
string Name {get;set;}
}
public class ByteRegister : IRegister
{
...
}
public class DoubleWordRegister : IRegister
{
...
}
Luego tengo otra clase que representa un bloque de estos registros del mismo tipo.
public class RegisterBlock<T> where T:IRegister
{
private IList<T> _registers;
... constructors, properties etc
public void AddRegister(T register)
{
_registers.Add(register);
}
}
Y finalmente tengo una clase RegisterMap que se utiliza para definir la lista de bloques de registro y cada registro dentro del bloque.
public class RegisterMap
{
private List<RegisterBlock<IRegister>> _blocks;
public RegisterMap()
{
_blocks = new List<RegisterBlock<IRegister>>();
RegisterBlock<ByteRegister> block1= new RegisterBlock<ByteRegister>("Block1", 0);
block1.AddRegister(new ByteRegister("Reg1"));
block1.AddRegister(new ByteRegister("Reg2"));
_blocks.Add(block1);
RegisterBlock<DoubleWordRegister> block2= new RegisterBlock<DoubleWordRegister>("Block2", 10);
block2.AddRegister(new DoubleWordRegister("Reg3"));
block2.AddRegister(new DoubleWordRegister("Reg4"));
block2.AddRegister(new DoubleWordRegister("Reg5"));
_blocks.Add(block2);
}
}
Sin embargo estoy recibiendo el siguiente error:
Error 20 Argument '1': cannot convert from 'RegisterBlock<ByteRegister>' to 'RegisterBlock<IRegister>'
en la línea _blocks.Add (Bloque 1) y de manera similar en _blocks.Add (Bloque 2);
¿Cuál es tu pregunta? El error del compilador es bastante claro. – phoog