【问题标题】:Generics inheritance compile error泛型继承编译错误
【发布时间】: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&lt;CommandInstrumentTrade&gt; ,失败是因为CommandInstrumentTrade不满足GenericWindowBase的where条件。
  • 继承不与泛型组合。仅仅因为BaseDerived有继承关系并不意味着Generic&lt;Base&gt;Generic&lt;Derived&gt;有继承关系。
  • @Damien_The_Unbeliever 你是对的,但有解决方法吗?
  • 不确定。如果问题的代码不是那么抽象,可能会更容易。我知道你要解决什么具体问题,以及你认为这个(尝试的)结构会如何为你解决它。
  • 搜索协变/逆变,堆栈溢出有很多这样的问题。

标签: c# .net generics


【解决方案1】:

问题是Generic&lt;Derived&gt; 不满足条件where T : Generic&lt;Base&gt;。即使Derived 派生自BaseGeneric&lt;Derived&gt; 也不会派生自Generic&lt;Base&gt;

StackOverflow 中有很多类似的问题。 尝试阅读那些:

  1. C# Generics Inheritance
  2. generic inheritance in C#?

继承不包含泛型。您需要创建某种从一个到另一个的转换器。也许如果您提供一些不太抽象的代码,我们可以帮助您

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多