的情况是协方差和逆变
public interface IRow
{
int Id { get; set; }
string Name { get; set; }
}
public class ARow : IRow
{ ... }
public class BRow : IRow
{ ... }
public class RowCollection<T> : Collection<T> where T : IRow
{ }
public interface ITable<T> where T : IRow
{
RowCollection<T> DataRows { get; }
int Id { get; set; }
string Name { get; set; }
}
public class ATable : ITable<ARow>
{
public RowCollection<ARow> DataRows
{
get;
set;
}
}
public class BTable : ITable<BRow>
{
public RowCollection<BRow> DataRows
{
get;
set;
}
}
当我做这样的事情
List<ITable<IRow>> lt = new List<ITable<IRow>>();
ITable<IRow> ads = new ATable();
我得到的错误,我知道它是与协方差和逆变,如果有人能帮助我克服这个错误将不胜感激。
当然,我需要了解有关此主题的更多信息,但希望能够首先快速解决此问题。
问候, 圣
另外相关:(http://stackoverflow.com/questions/1724919/understanding-covariance-and-contravariance-in-c-sharp-4-0)[以C#4.0了解协变和逆变] [了解C#中的协变和逆变接口](http://stackoverflow.com/questions/2719954/understanding-covariant-and-contravariant-interfaces-in-c-sharp),[为什么我不能指定一个列表一个列表 ?](http://stackoverflow.com/questions/4652858/why-cant-i-assign-a-listderived-to-a-listbase);还有其他一些。 –
poke
如果你已经知道什么是造成你的问题(协方差和逆变)的术语,那么请展示一些努力,并且看看你开始写这个问题时应该向你提出的许多*现有问题,以及表明你的问题确实是基于你在这些问题的帮助下已经获得的知识。 – poke
完全读出我的问题......我已经承认它的协变和逆变。还提到我正在寻找一个快速帮助/解决方案,并会在这个主题上了解更多。 – sanoj