我感觉好像漏掉了一两个 C# 课程,但这是我的困境:
我有一个抽象类,从中派生出多个子类。
我确定每个子类都需要一个构造函数,该函数需要一个特定的静态对象作为模型,而这个对象对于每个子类都不同。
我的第一个尝试是在抽象父类中创建一个公共静态对象,然后在创建任何子类实例之前,我将其修改为每个子类所需的对象。但事实证明,这种方法实际上只创建了一个静态对象,即用于抽象类的对象,并且每个子类都使用它。
我该如何解决这个问题?
更确切地说,这是伪代码:
抽象父类:
abstract class AbstractClass
{
static public ModelObject Model;
...
}
一个子类:
class Child : AbstractClass
{
...
public Child()
{
this.someField = Model.someField;
}
}
编辑:
模型需要是“ModelObject”类的成员,它不应该是单例或其他任何东西。
编辑2:
更确切地说,我选择了这种实现方式用于国际象棋游戏:我有一个抽象类表示棋子,在子类中表示游戏中具体的棋子:兵、马等等。
抽象类继承自MeshMatObject,这是一个代表具有基本功能的通用3D对象的类,如旋转、网格、材质、纹理等,并为棋盘上的棋子定义抽象方法,例如GetPossibleMoves()。
我之前提到的Model对象是MeshMatObject的成员,并且在我看来,应该在类外部定义一次,然后在所有棋子中使用。我的意思是:例如,所有兵都具有相同的网格和纹理,因此我不认为每次制作兵时都需要将模型作为参数。