C#中类关系树的继承?

C#中类关系树的继承?,c#,oop,generics,inheritance,composition,C#,Oop,Generics,Inheritance,Composition,我们正在开发一款具有多种游戏模式的游戏。我们这里有以下代码: //以下内容将在我们公司的代码库中。 公共类游戏模式 { 公共博弈状态; 公开球员名单; } 公共类游戏状态 { 公共游戏模式; } 公共级玩家 { 公共游戏模式; } //下面是我们游戏的代码库。 公共类死亡竞赛:游戏模式 { //这里,我们有一个GameState类型的currentState,而不是DeathmatchState //还有一个玩家类型列表,而不是死亡竞赛玩家 } 公共类死亡竞赛状态:游戏状态 { //这里是游戏模

我们正在开发一款具有多种游戏模式的游戏。我们这里有以下代码:

//以下内容将在我们公司的代码库中。
公共类游戏模式
{
公共博弈状态;
公开球员名单;
}
公共类游戏状态
{
公共游戏模式;
}
公共级玩家
{
公共游戏模式;
}
//下面是我们游戏的代码库。
公共类死亡竞赛:游戏模式
{
//这里,我们有一个GameState类型的currentState,而不是DeathmatchState
//还有一个玩家类型列表,而不是死亡竞赛玩家
}
公共类死亡竞赛状态:游戏状态
{
//这里是游戏模式,不是死亡竞赛
}
公共类死亡竞赛玩家:游戏玩家
{
//这里是游戏模式,不是死亡竞赛
}
对于上面的代码,我们遇到了一个问题,即字段的类型是基类型,而不是相应的继承类型。所以我们就这样做了:

公共类游戏模式
备忘录:游戏模式
其中TGameState:GameState
玩家:玩家
{
公营国家;
公开球员名单;
}
公共类游戏状态
备忘录:游戏模式
其中TGameState:GameState
玩家:玩家
{
公共游戏模式;
}
公共级玩家
备忘录:游戏模式
其中TGameState:GameState
玩家:玩家
{
公共游戏模式;
}
//--------------------------------------------------------------------------------------
公共类死亡竞赛:游戏模式
{
//这里,我们得到了类型为TGameState的当前状态,这正是DeathmatchState
//还有一个TGamePlayer的列表,这就是死亡竞赛玩家
}
公共类死亡竞赛状态:游戏状态
{
//这里是死亡竞赛
}
公共类死亡竞赛玩家:游戏玩家
{
//这里是死亡竞赛
}
虽然这确实很完美,但这是唯一的方法吗?或者有没有其他方法让其他程序员不那么困惑

对于这种方法,我们实际上是对一个维度(游戏死亡匹配关系)使用继承,对另一个维度(游戏模式-游戏状态-玩家关系)使用泛型


另外,我还想听听其他语言如何处理这种情况:-p

您可能会在gamedev.SE上得到更好的答案。根据我的经验,继承很难映射到游戏中——硬编码和合成在几乎任何场景中都似乎更好。我也曾尝试过面向对象的游戏引擎:D。不要在你的播放器中加入
GameMode
,而是将
igamode
注入播放器。这三个类是否都需要全部三个类型参数?GameState和GamePlayer类似乎只需要一个备忘录。游戏模式本身需要TGameState和tgameplayer你可能会在gamedev.SE上得到更好的答案。根据我的经验,继承很难映射到游戏中——硬编码和合成在几乎任何场景中都似乎更好。我也曾尝试过面向对象的游戏引擎:D。不要在你的播放器中加入
GameMode
,而是将
igamode
注入播放器。这三个类是否都需要全部三个类型参数?GameState和GamePlayer类似乎只需要一个备忘录。游戏模式本身需要TGameState和TGamePlayer