我有基础课:

class ARBase<T> : ActiveRecordValidationBase<T> where T : class
{
}


少儿班

class Producent : ARBase<Producent>
{
}

class Supplier : ARBase<Supplier>
{
}


现在在其他类中,我想拥有Property类型:

public IList<ARBase<Object>> MyCollection
{
}


并希望能够分配供应商集合或生产者集合,但我遇到错误:无法将List<Producent>强制转换为IList<ARBase<Object>> ...

有人知道解决方案吗?

最佳答案

基本上,问题是.NET泛型不支持这样的协方差-在某些情况下有支持,但仅支持接口和委托,而C#仅从版本4开始支持。(IList<T>仍然不是。 NET 4.0,因为它同时使用“输入”和“输出”两种含义的T。)

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

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

10-08 18:03