C#抽象类静态字段inheritance

我觉得我跳过了一两个C#课程,但这是我的困境:

我有一个抽象类,我从中派生出多个子类。

我确信,对于每个子类,我将有一个构造函数,它需要某个静态对象作为模型,并且每个子类的对象都不同。

我的第一种方法是在抽象父类中创建一个公共静态对象然后,在我开始创建子类的任何实例之前,我会为它们中的每一个修改它,但事实certificate这样我实际上只做了一个静态对象,用于抽象类,每个子类都使用它。

我怎么能解决这个问题?

更确切地说,这是伪代码:

父抽象类:

abstract class AbstractClass { static public ModelObject Model; ... } 

其中一个子课程:

 class Child : AbstractClass { ... public Child() { this.someField = Model.someField; } } 

编辑:

Model需要是“ModelObject”类的成员,它不应该是单例或其他任何东西。

EDIT2:

更确切地说,我选择了这种实施方案来进行国际象棋游戏:我有一个抽象的国际象棋类,子类代表游戏的具体部分:棋子,骑士等等。

抽象类inheritance自MeshMatObject,这是一个表示具有基本function的通用3d对象的类,如旋转,网格,材质,纹理等,它定义了象棋游戏块的抽象方法,如GetPossibleMoves()。

我上面讨论的Model对象是MeshMatObject的一个成员,在我看来,应该只在类外定义一次,然后用于所有的部分。 我的意思是:例如,所有的棋子都有相同的网格和纹理,所以每次你想制作一个棋子时,我都没有看到将模型作为参数的意义。

我倾向于使用类似于@ shf301的解决方案。 根据您的需要,将基类设置为:

 abstract class AbstractClass { } abstract class AbstractClass : AbstractClass where TModel : ModelObject { static public TModel Model; ... } 

这允许我在非generics函数中使用的公共基类。 这也允许派生类型选择确切的模型类型,并可以减少铸造。

您可以通过使Abstract类通用来绕过共享静态字段。 每个generics类都将获得它自己的静态字段副本。

 abstract class AbstractClass { static public ModelObject Model; ... } 

然后每个子类将使用静态字段的不同实例。

 class Child : AbstractClass { ... public Child() { this.someField = Model.someField; } } 

AbstractClass不引用generics参数并不重要。 您只是使用它为每个子类提供基类的唯一实例。

工厂如何将类与inheritance的模型分离:

 public static class ModelObjectFactory { public static ModelObject GetModel(T obj) { // return ModelObject according to type of parameter } } class Child { public Child() { ModelObject mo = ModelObjectFactory(this); this.someField = mo.someField; } }