是否可以在继承的子类中强制使用静态数据成员?
这是我的问题/思考过程:
我想创建一个“GameObject”基类,所有其他对象都继承这个基类以借助多态性。
我希望每个继承的类都有一个顶点的静态数据成员列表来渲染多边形。确切的过程是:
对于从Game Object继承的所有对象,我想保证它具有静态顶点列表
我是否应该关心它是否有列表,或者我应该关心它是否有绘制方法(由iRender接口保证)?
答案 0 :(得分:1)
凭借继承,基类中的protected static List<Vertex>
自动成为任何派生类的一部分。只要您不需要每个派生类都有自己的列表与任何父类中的列表分开,这应该可以工作。
答案 1 :(得分:1)
在基类中为所有后代和基类本身声明了一个静态类成员的实例。因此,基类中的单个顶点列表将不起作用。可以做些什么: - 在基类声明
private static Dictionary<string, List<vertex>> PointsPerClass =
new Dictionary<string, List<vertex>>();
你没有说明后代如何指定它们的顶点,但是让我们说所有后代都覆盖了一个虚拟基类方法:
protected virtual FillStaticVertices(List<vertex> aVertices)
{
}
然后基类有公共方法:
public GameObject CreateObject()
{
string key = GetType().FullName;
List<vertex> points = null;
if (PointsPerClass.ContainsKey(key))
points = PointsPerClass[key];
else {
points = new List<vertex>();
PointsPerClass.Add(key, points);
FillStaticVertices(points);
}
// CreateObjectFromPoints is an abstract method implemented by descendants
GameObject gameObj = CreateObjectFromPoints(points);
// apply textures, rotations, etc
return gameObj;
}
答案 2 :(得分:-1)
如果GameObject是一个界面,那么你可以强制存在static Property
。
interface GameObject
{
static List<vertex> vertices {get; set;}
//other common code
};
或者,您可以在GameObject
本身中将顶点列表作为受保护的数据成员,并让派生类访问它。