是否可以在继承的子类中强制使用静态数据成员?
这是我的问题/思考过程:
我想创建一个“GameObject”基类,所有其他对象都继承自该基类以借给多态性。
我希望每个继承的类都有一个静态数据成员顶点列表来渲染多边形。确切的过程是:
- 基于顶点的静态列表创建对象
- 应用纹理
- 根据实例化对象的旋转变量旋转对象
- 根据实例对象的世界坐标变换对象
对于从游戏对象继承的所有对象,我想保证它具有静态顶点列表
我应该关心它是否有列表,还是只关心它有一个绘制方法(由 iRender 接口保证)?
是否可以在继承的子类中强制使用静态数据成员?
这是我的问题/思考过程:
我想创建一个“GameObject”基类,所有其他对象都继承自该基类以借给多态性。
我希望每个继承的类都有一个静态数据成员顶点列表来渲染多边形。确切的过程是:
对于从游戏对象继承的所有对象,我想保证它具有静态顶点列表
我应该关心它是否有列表,还是只关心它有一个绘制方法(由 iRender 接口保证)?
由于继承,protected static List<Vertex>
基类中的 a 自动成为任何派生类的一部分。只要您不需要每个派生类都有自己的列表与任何父类中的列表分开,这应该可以工作。
在基类中为所有后代和基类本身声明了一个静态类成员的单个实例。因此,基类中的单个顶点列表是行不通的。可以做什么: - 在基类中声明
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;
}
如果 GameObject 是一个接口,那么您可以强制存在一个static Property
.
interface GameObject
{
static List<vertex> vertices {get; set;}
//other common code
};
或者,您可以将顶点列表GameObject
本身作为受保护的数据成员,并让派生类访问它。