【发布时间】:2017-07-30 03:02:02
【问题描述】:
我有以下类定义
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 是一个具体类型。
【问题讨论】:
标签: c# generics inheritance