0
我有下面的类定义动态分配混凝土类,它扩展抽象类用通用
public class AbstractIem<T> where T : SomeObject
{
public abstract T Item { get; }
}
public class ConcreteItem1 : AbstractItem<ClassExtendingSomeObject>
{
public override ClassExtendingSomeObject Item { get; }
}
public class ConcreteItem2 : AbstractItem<AnotherClassExtendingSomeObject>
{
public override ClassExtendingSomeObject Item { get; }
}
当我碰到的问题是,当我想动态分配的AbstractItem<SomeObject>
对象,
AbstractItem<SomeObject> myItem;
switch (someIntValue)
{
case 1:
myItem = new ConcreteItem1();
break;
case 2:
myItem = new ConcreteItem2();
break;
}
尝试设置时出现以下错误:myItem
:
不能隐含转换型“ConcreteItem1”到“AbstractItem”
我一直认为这应该工作,因为每个ConcreteItem
类扩展AbstractItem<SomeObject>
其中SomeObject
是一个具体类型。
非常有趣。我从来没有听说过方差。是否有一个特定的原因,它只能在接口上完成? – yitzih