【发布时间】:2015-02-19 15:25:22
【问题描述】:
案例 1: 我有以下情况:我想将动态多态性应用于列表。
我有一个基类 ALayer
public class ALayer {
int Id {get; set;}
}
还有一个包含层列表的基类 A
public class A {
List<ALayer> Layers {get; set;}
}
然后我将有几个从我的基类扩展而来的类:
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 父类。
可以编码吗?还是我的设计有缺陷?或者我如何根据类的类型来实例化我的列表?
提前谢谢你!
已编辑的问题
案例 2: 在最后一种情况下,如何将此泛型应用于继承中的中间类?假设在 A 和 B 之间存在一个中间类
public class Middle:A{
int anyatrr;
}
然后我的类 B 继承自 Middle,但仍然在 B 构造函数中是我要应用动态多态性的地方。
public class B:Middle {
public B(){
this.Layers = new List<BLayer>();
}
}
如何在中间类中结合泛型符号加上从类 A 的继承
【问题讨论】:
-
是我还是你对你的“B”和“C”的东西做同样的事情。然后,为了让您的问题更清楚,您应该删除“C”案例。
标签: c# list inheritance dynamic polymorphism