【发布时间】:2014-02-14 08:16:26
【问题描述】:
我在尝试编译时遇到编译错误
类型“WpfApplication2.CommandInstrumentTrade”不能用作泛型类型或方法“WpfApplication2.GenericWindowBase”中的类型参数“T”。没有从“WpfApplication2.CommandInstrumentTrade”到“WpfApplication2.GenericCommandBase”的隐式引用转换
public interface IBaseClass
{
int ID { get; set; }
}
public class BaseClass : IBaseClass
{
public int ID { get; set; }
}
public class DerivedClass : BaseClass
{
}
public class Command
{
}
public class GenericCommandBase<T> : Command where T : IBaseClass
{
}
public class DerivedGenericCommand : GenericCommandBase<DerivedClass>
{
}
public class GenericWindowBase<T> where T : GenericCommandBase<IBaseClass>
{
}
public class DerivedGenericWindow : GenericWindowBase<DerivedGenericCommand> // this line fails
{
}
【问题讨论】:
-
该错误与您的示例代码不匹配。错误说你使用的是
GenericWindowBase<CommandInstrumentTrade>,失败是因为CommandInstrumentTrade不满足GenericWindowBase的where条件。 -
继承不与泛型组合。仅仅因为
Base和Derived有继承关系并不意味着Generic<Base>和Generic<Derived>有继承关系。 -
@Damien_The_Unbeliever 你是对的,但有解决方法吗?
-
不确定。如果问题的代码不是那么抽象,可能会更容易。我不知道你要解决什么具体问题,以及你认为这个(尝试的)结构会如何为你解决它。
-
搜索协变/逆变,堆栈溢出有很多这样的问题。