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