鉴于此类型:
public class DataRow
{
}
public class DataRow<T> : DataRow
{
}
使用它:
public class DataRowCollection
{
public IList<DataRow> List{get;set;}
}
public class DataRowCollection<T> : DataRowCollection
{
public new IList<DataRow<T>> List{get;set;}
}
为什么我无法将base.List
分配给this.List
中的DataRowCollection<T>
?为什么我不能将this.List
转换为非泛型类型并分配给base.List
?
修改:DataRowCollection<T>
base.List = (IList<DataRow>)this.List;
(演员表演失败)
base.List = this.List;
(编译器错误)
答案 0 :(得分:3)
因为IList
是不变的,而且与其泛型类型无协变或逆变。
如果该投射有效,那么您可以在列表中添加DataRow<SomeTypeThatIsNotT>
,这将违反IList
的合同。