层次结构考虑

时间:2011-11-29 00:52:46

标签: c# class data-structures hierarchy

我正在制作一款具有当前GenerateStats类层次结构的游戏 - > ClassStats - > CreateCharacter。我觉得这可能会倒退。统计信息没有类统计信息,类统计信息没有字符。我会倒退吗?应该是CreateCharacter - > ClassStats - > GenerateStats?感谢您的投入!

4 个答案:

答案 0 :(得分:9)

这些在类层次结构中都没有意义;类层次结构代表“名词之间的一种”关系;你列出的那些东西都是动词。那些应该是一个类的方法。该类应该是 CharacterGenerator

答案 1 :(得分:0)

CreateCharacter似乎不应该是ClassStats的子类,但由于我不知道任何类中的实际内容,我无法肯定地说。

答案 2 :(得分:0)

从我看来,你不会倒退。继承得到更具体 - 例如Apple继承自Fruit(实现IEdible!),继承Object。不是相反。当然,你的课程流向哪个方向并不完全明显,所以我不确定。只需确保基类是最不具体的,派生类比基类更具体。如果您经常使用private new xxx MyFunction() { //...隐藏方法,那么表明您正在以错误的方式执行此操作。

答案 3 :(得分:0)

改编(正如Eric指出的那样,使用动词具有误导性),我相信你的问题是:

CharacterGenerator应该是一种ClassGenerator,它本身应该是一种StatsGenerator吗?一些注意事项:

  1. 您是否有其他类型的东西可以从ClassGenerator或StatsGenerator派生出来?如果没有,则不需要继承。

  2. 您是否有其他想要能够使用任何StatsGenerator或任何ClassGenerator的代码?如果您没有使用基类操作的代码,则不需要基类。

  3. 根据名字,我在想你真正想要描述的是一种构图关系。看看这个表达式听起来更像你正在尝试做的事情:

    您有一个CharacterGenerator,它使用ClassGenerator生成角色类,使用StatsGenerator生成角色统计数据。结果是包含Class和Stats的Character。

    编程时有很多方法可以模拟和解决问题;最好选择最简单的方法,继承关系会增加复杂性。如果你计划使用它,你应该有充分的理由介绍这种复杂性。


    此外,正如其他人所指出的那样,您不一定需要为复合行为定义一个类。在某些情况下,方法或一些方法就足够了。也就是说,在“太小”(少数几种方法)而不是“太大”(一些充满各种不同方法的巨型类)方面犯错并不一定是坏事。找到合适的平衡是棘手的,所以试验。