c#,泛型类型的问题

时间:2010-01-23 18:20:52

标签: c# generics

我有基类:

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>> ...

任何人都知道解决方案吗?

1 个答案:

答案 0 :(得分:3)

基本上问题是.NET泛型不支持这样的协方差 - 在某些情况下支持,但仅支持接口和委托,而C#仅支持版本4的协方差。(IList<T>仍然不是.NET 4.0中的变体,因为它在“in”和“out”意义上都使用T。)

作为可能出现问题的一个示例,假设有人将Supplier添加到Producer的列表中 - 您不希望允许这样做,但是无法阻止编译时如果您可以将List<Producer>转换为IList<ARBase<object>>

您希望您的消费者能够对您的房产做些什么?这将建议如何进行。