我在尝试将通用对象添加到List <>时遇到错误.
它可能与协方差和逆变相关,但我不知道如何解决这个问题.我试图用T:IRegister来限制我的泛型类型.
我有一个接口来表示一个寄存器,然后是两个代表ByteRegister和DoubleWordRegister的类.
public interface IRegister
{
string Name {get;set;}
}
public class ByteRegister : IRegister
{
...
}
public class DoubleWordRegister : IRegister
{
...
}
Run Code Online (Sandbox Code Playgroud)
然后我有另一个类,它代表了所有相同类型的这些寄存器的块.
public class RegisterBlock<T> where T:IRegister
{
private IList<T> _registers;
... constructors, properties etc
public void AddRegister(T register)
{
_registers.Add(register);
}
}
Run Code Online (Sandbox Code Playgroud)
最后我有一个RegisterMap类,用于定义寄存器块列表和块内的每个寄存器.
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 …Run Code Online (Sandbox Code Playgroud)