在单个对象中的不同功能(Xna,Menusystems和一般C#)

时间:2013-12-15 03:28:05

标签: c# class oop dynamic xna

我一直想知道如何让一个物体在不同情况下采取不同的行动 澄清我在想什么:
我想制作一个菜单系统,我想要一个“按钮”类。但按钮应该根据它的按钮类型而有所不同。 一个按钮可以关闭程序,另一个可以开始游戏,第三个可以进入设置。

(我考虑将方法解析为参数,但是你仍然需要在代码中的某处编写很多不同的方法)

你如何在考虑OOP的情况下做到这一点?我可以使用枚举和开关来硬编码简单菜单的基本功能,但我想知道是否可以避免。 我想避免像代表这样的事情,因为游戏不是以这种方式基于事件的,还有切换案例,大的if / else语句因为它们真的很难看。

有没有办法让对象表现得像这样?

制作菜单的其他替代方法是什么,试图避免常用枚举的切换案例。 (不禁用枚举)

1 个答案:

答案 0 :(得分:2)

  

我想避免像代表这样的事情,因为游戏不是以这种方式基于事件

不是吗?无论是游戏还是网络应用程序,点击按钮都是一个事件。根据定义,您想要做出反应的事情,例如按下按钮。单击按钮时发生的情况应该与UI中的按钮松散耦合,原因是您已经遇到的原因(大型开关/ if-elses是一种痛苦)等等。对于这个特殊情况,C#event字段看起来非常合适。

在某些时候,你会以某种方式在某处创建设置按钮。为什么不在那里接线?有点像:

class Button
{
  public Button(string label) {}
  public event Action Clicked;
}

class Program
{
  public static void Main(string[] args)
  {
    var settingsButton = new Button("Settings");
    settingsButton.Clicked += () =>
    {
      // open settings view
    };
  }
}

我会为这个问题避免继承,因为它会因为错误的原因而增加不必要的复杂性。如果覆盖类改变或补充它所扩展的类的行为,你应该(可能)使用继承(逻辑进展object扩展Component扩展Button扩展ToggleButton 1}})但不要创建一个与构建UI的方式密切相关的类层次结构。如果您更改设置,则可以访问下拉菜单而不是按下按钮,您不希望被绑定到SettingsButton类;您希望能够简单地更改哪个事件触发了所需的行为,在这种情况下,请下拉下拉菜单。