具有继承类型的 c# 列表的动态实例

Dynamic instance of c# list with inherited type

案例一: 我有以下情况:我想将动态多态性应用于列表。

我有一个基础class ALayer

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

还有另一个基础 class A 包含层列表

public class A {
   List<ALayer> Layers {get; set;}
}

然后我将有几个 classes 从我的基地延伸 classes:

public class BLayer: Alayer {
   int blayerattr {get; set;}
}

public class B:A {
   //I want to apply the polymorphism in the constructor
   public B(){
     this.Layers = new List<BLayer>();//error
   }
}

public class CLayer: Alayer {
   int clayerattr {get; set;}
}

public class C:A {
   //I want to apply the polymorphism in the constructor
   public C(){
      this.Layers = new List<CLayer>();//error
   }

}

但是编译器报错说不能隐式地将子层转换为父层。子层非常不同,所以我决定创建 ALayer Parent Class.

可以编码吗?还是我的设计有缺陷?或者如何根据 class?

的类型实例化我的列表

提前致谢!

已编辑问题

案例二: 在最后一个案例之后,如何将此泛型应用于继承中的中间 class ?假设在 A 和 B

之间存在中间 class
public class Middle:A{
   int   anyatrr;
}

然后我的 class B 继承自 Middle,但仍然在 B 构造函数中是我要应用动态多态性的地方。

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

我如何在中间组合 class 泛型符号加上从 class A

的继承

您可以使用泛型:

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

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

public class B : A<BLayer>
{
    //I want to apply the polymorphism in the constructor
    public B()
    {
        this.Layers = new List<BLayer>();
    }
}

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

您可以在此处获得有关 C# 泛型的更多信息:https://msdn.microsoft.com/en-us/library/512aeb7t.aspx

更新

案例二 (感谢 X.L.Ant)

就这样吧:

public class Middle<T> : A<T>{ and then public class B : Middle<BLayer> {