没有装箱或类型参数转换

时间:2015-02-19 17:56:13

标签: c# list generics inheritance polymorphism

我收到以下错误:

  

错误1类型'T'不能用作类型参数'T'   泛型类型或方法'ClassLibrary1.A'。没有拳击或   类型参数从'T'转换为'ClassLibrary1.ALayer'。

我正在尝试应用泛型来实现带有列表和继承的动态多态。我有以下类结构:

public abstract class ALayer
{
    public int Id { get; set; }
}

public abstract class A<T> where T: ALayer
{
    public List<T> Layers;
}

我在中产阶级声明中得到错误

public abstract class Middle<T>:A<T>
{
    public int middleAttr { get; set; }
}

这是我想要获得动态多态性的第三层课程

public class BLayer : ALayer
{
    public int Id { get; set; }
}

public class B:Middle<BLayer>
{
    public B() {
        this.Layers = new List<BLayer>();
    }
}

这是什么错误?

非常感谢任何帮助

答案 我必须明确命名约束

public abstract class Middle<T>:A<T> where T: ALayer
{
    public int middleAttr { get; set; }
}

1 个答案:

答案 0 :(得分:2)

我必须在Middle class上明确命名约束

public abstract class Middle<T>:A<T> where T: ALayer
{
    public int middleAttr { get; set; }
}