C# 等级考虑

C# 等级考虑,c#,class,data-structures,hierarchy,C#,Class,Data Structures,Hierarchy,我正在制作一个游戏,当前的类层次结构是GenerateStats->ClassStats->CreateCharacter。我觉得这可能是在倒退。属性没有类属性,类属性也没有角色。我在倒退吗?它应该是CreateCharacter->ClassStats->GenerateStats吗?谢谢你的意见 这些在类层次结构中都没有意义;类层次表示名词之间的一种关系;你列出的那些东西是动词。这些应该是类的方法。该类应该是CharacterGenerator。CreateCharacter似乎不应该是Cl

我正在制作一个游戏,当前的类层次结构是GenerateStats->ClassStats->CreateCharacter。我觉得这可能是在倒退。属性没有类属性,类属性也没有角色。我在倒退吗?它应该是CreateCharacter->ClassStats->GenerateStats吗?谢谢你的意见

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

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

从我的了解来看,您没有倒退。继承变得更加具体-例如,
Apple
继承自
Fruit
(实现
IEdible
!)继承
对象。而不是相反。当然,你的课程流向并不完全清楚,所以我不确定。只需确保基类是最不特定的,派生类比基类更特定。如果你经常使用
private new xxx MyFunction(){//…

重新表述方法(正如Eric指出的,使用动词是误导性的),那么你的问题是:

CharacterGenerator是否应该是一种类生成器,而类生成器本身应该是一种StatsGenerator?需要考虑以下几点:

  • 您是否希望从ClassGenerator或StatsGenerator派生出其他类型的东西?如果没有,您不需要继承

  • 是否有其他代码希望能够使用任何StatsGenerator或任何ClassGenerator?如果没有使用基类进行操作的代码,则不需要基类

  • 根据这些名字,我想你真正想要描述的是一种组合关系。看看这个表达式听起来是否更像你想要做的:

    您有一个CharacterGenerator,它使用ClassGenerator生成角色类,使用StatsGenerator生成角色统计信息。结果是一个包含类和统计信息的角色

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



    另外,正如其他人所指出的,您不一定需要定义一个类来组合行为。在某些情况下,一个方法或几个方法就足够了。也就是说,犯“太小”(小类有几个方法)而不是“太大”(几个充满各种不同方法的巨大类)的错误并不一定是坏事找到正确的平衡是一件棘手的事情,所以要进行实验。

    因为我不知道这些东西是什么,我无法知道你是否做对了。很抱歉,我做了一次编辑,提到这些是我层次结构中的类。抱歉,谢谢你的指点;我会记住这一点!我正在学习编程并尝试学习。GenerateStats创建特定角色的基本力量、韧性、机智和智能。ClassStats详细说明如何更改这些属性,战士比法师更强大。最后CreateCharacter实际创建角色、名称、属性,并最终创建角色将拥有的其他项。@user1056607:这些更好那么,定义函数……面向对象编程并不意味着所有东西都必须是类。让类凌驾于函数之上会消耗资源吗?@user1056607:可能吧。不过,这不是问题——你只是不使用类来实现它。这是语义。@user1056607,如果它让事情更难理解,那么它可能会消耗人力资源而且人力资源通常比CPU周期更昂贵。ClassStats是角色力量、韧性、智力和智慧的操纵方式。根据他们选择的职业,统计信息会相应地变化。我会让CharacterClass作为超类。然后我会让战士或法师或其他从你不应该需要CreateCharacter。这应该是在字符类构造函数中。谢谢你考虑的想法。我正在考虑重新使用状态发生器来为我将投入游戏中的怪物。当我包含怪物时,层次结构路径看起来像:GeaStestATS:MunSTRACEST:GEATATEMONSTER。这是一种怪物,GenerateMonster将用于特定的怪物。