【问题标题】:c# overriding enumc# 重写枚举
【发布时间】:2011-10-12 22:56:28
【问题描述】:

我知道这个问题以前可能有人问过,但我似乎找不到合适的解决方案(请记住,我不是 C# 专家,而是中级用户)...

我准备了一个基类,包括一个枚举 (AnimationStates) 用于我的屏幕对象可能具有的动画状态(例如,士兵可能具有不同的状态,而鸟可能具有另一组状态..).. 基类是用于为我的动画屏幕对象存储更新方法和其他内容(比如以相同的方式为所有对象设置动画)...基类中的枚举(自然)内部是空的。我有使用枚举编写的方法会员...

如果我通过“public new enum ...”在我的子类中定义枚举,我可以“继承”它..对吗?此外,有趣的是,我在基类中有一个字典,我试图将它从一个孩子(即士兵或鸟)传递给它的基类(动画对象)......但我不能......

我觉得我做错了什么或错过了什么。有什么想法吗?

【问题讨论】:

标签: c# enums xna-4.0


【解决方案1】:

嗯,你不能直接在 C# 中使用枚举。

我建议采用更多面向对象的方法,并用真实对象替换枚举。这样你就在你的基类中定义了一个接口IAnimationState,并添加了一个抽象方法getAnimationState()。在屏幕对象类中,您只需实现此方法,返回接口IAnimationState 的一些具体实现。通过这种方式,您可以将一些逻辑放入小的动画状态类中,从而使您的项目更加模块化。

【讨论】:

    【解决方案2】:

    您不能扩展枚举。您可以在派生类中创建新的枚举,但它们是不同的。

    我认为你应该只使用 int 常量。

    【讨论】:

      【解决方案3】:

      枚举类型表示一组简单的值。就是这样。当枚举根本不符合要求时,您正在尝试将枚举用作类类型。

      只需创建一个枚举(如果您确实需要)并为复杂的操作创建一个“真实”类型。

      enum SomeEnum { Foo, Bar }
      
      class Whatever
      {
          public SomeEnum { get { return SomeEnum.Foo; } }
      }
      

      这个问题是developing a solution without really understanding the problem. 的一个很好的例子,而不是提出你的解决方案并要求我们找出没有任何意义的最后 20%,而是告诉我们你实际上想要完成什么。这里的某个人可能有一个你甚至没有想到的更好的方法。

      【讨论】:

        猜你喜欢
        • 2016-03-05
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多