【发布时间】:2017-01-05 12:50:03
【问题描述】:
我有以下基类:
public abstract class BaseClass<T> where T : IComparable
{
}
还有这个子类:
public class ChildClass<T> : BaseClass<int>
{
}
从程序的不同位置我有以下代码:
List<BaseClass<IComparable>> objectList= new List<BaseClass<IComparable>>();
ChildClass<int> childObject= new ChildClass<int>();
ChildClass<double> childObject2= new ChildClass<double>()
//both int and double are IComparable
//the bellow code dosent compile, it syas it cannot be casted, i dont understand why becuse they are his child class:
objectList.Add(childObject);
objectList.Add(childObject2);
【问题讨论】:
-
你想要的是covariance,它在类中不可用,但在接口中可用。但是,如果泛型类型仅用作属性(只读)和方法(返回类型,但不是参数)的输出,则只能使泛型类型协变。另一种选择是只使泛型类型匹配。
-
首先,尝试编码
BaseClass<IComparable> item = new ChildClass<int>();,然后找到解决方案,然后将解决方案移植到您的列表方案(我评论中的代码示例不起作用,但这基本上是您尝试执行的操作致电Add) -
@grek40
BaseClass<IComparable> item = new ChildClass<int>();不起作用,原因与列表相同。 -
@Carson 是的,它基本上是一个提示如何将手头的问题简化为最小形式(MCVE *hint*)
标签: c# oop generics inheritance