Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有继承类型的c#列表的动态实例_C#_List_Inheritance_Dynamic_Polymorphism - Fatal编程技术网

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

具有继承类型的c#列表的动态实例,c#,list,inheritance,dynamic,polymorphism,C#,List,Inheritance,Dynamic,Polymorphism,案例1: 我有以下情况:我想对列表应用动态多态性 我有一个基班同学 public class ALayer { int Id {get; set;} } 和另一个基类A,它包含一个层列表 public class A { List<ALayer> Layers {get; set;} } 然后我的类B继承自Middle,但仍然在B构造函数中,这是我想要应用动态多态性的地方 public class B:Middle { public B(){

案例1: 我有以下情况:我想对列表应用动态多态性

我有一个基班同学

public class ALayer {
   int Id {get; set;}
}
和另一个基类A,它包含一个层列表

public class A {
   List<ALayer> Layers {get; set;}
}
然后我的类B继承自Middle,但仍然在B构造函数中,这是我想要应用动态多态性的地方

public class B:Middle {       
   public B(){
     this.Layers = new List<BLayer>();
   }
}
公共B类:中等{
公共图书馆B(){
this.Layers=新列表();
}
}

如何在中间类中组合泛型符号加上类A/< P> < P>的继承,可以使用泛型:

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; }
}
公共抽象类ALayer
{
int Id{get;set;}
}
公共抽象类A,其中T:ALayer
{
受保护的列表层{get;set;}
}
B级:A级
{
//我想在构造函数中应用多态性
公共图书馆B()
{
this.Layers=新列表();
}
}
公共课布莱耶:阿拉耶
{
int blayeratr{get;set;}
}
你可以在这里获得更多关于C#泛型的信息:

更新

案例2 (贷记X.L.Ant)

只要做:

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

是我还是你对你的“B”和“C”做了完全相同的事情。然后,为了让你的问题更清楚,你应该删除“C”的情况。答案是正确的。如果你解释一下泛型不变性,会更有帮助。此外,你还可以添加
类a:a
:o)这讲了一点关于Just do:
公共类中产阶级:A{
然后是
公共类B:Middle{
,这让人感到困惑。请编辑您的问题,或者最好接受@EduardoBrites的答案,然后再问一个新的问题。评论不适合这样做。
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; }
}
public class Middle<T> : A<T>{ and then public class B : Middle<BLayer> {