我有基类:
class ARBase<T> : ActiveRecordValidationBase<T> where T : class
{
}
和少数儿童班
class Producent : ARBase<Producent>
{
}
class Supplier : ARBase<Supplier>
{
}
现在在其他课程中我想要具有类型的属性:
public IList<ARBase<Object>> MyCollection
{
}
并且希望能够分配供应商集合或Producent集合,但我收到错误:无法将List<Producent>
投射到IList<ARBase<Object>>
...
任何人都知道解决方案吗?
答案 0 :(得分:3)
基本上问题是.NET泛型不支持这样的协方差 - 在某些情况下支持,但仅支持接口和委托,而C#仅支持版本4的协方差。(IList<T>
仍然不是.NET 4.0中的变体,因为它在“in”和“out”意义上都使用T
。)
作为可能出现问题的一个示例,假设有人将Supplier
添加到Producer
的列表中 - 您不希望允许这样做,但是无法阻止编译时如果您可以将List<Producer>
转换为IList<ARBase<object>>
。
您希望您的消费者能够对您的房产做些什么?这将建议如何进行。