C# 如何有效地将信息从类传递回主程序?

C# 如何有效地将信息从类传递回主程序?,c#,class,monogame,C#,Class,Monogame,我有一个程序,它有许多类,我把输入信息传递给它们;为了确定我应该将输入中继到哪个类,如果您愿意,我有一个保持当前类“处于焦点”的变量 以下是用于演示的伪代码: class Class1 ... class Class2 ... Class1 class1 = new Class1; Class2 class2 = new Class2; string currentClass = "class1"; KeyboardState kbstate = Keyboard.St

我有一个程序,它有许多类,我把输入信息传递给它们;为了确定我应该将输入中继到哪个类,如果您愿意,我有一个保持当前类“处于焦点”的变量

以下是用于演示的伪代码:

class Class1 ...
class Class2 ...

Class1 class1 = new Class1;
Class2 class2 = new Class2;

string currentClass = "class1";

KeyboardState kbstate = Keyboard.State();

switch (currentClass)
{
    case "class1":
        class1.HandleInput(kbstate);
    case "class2":
        class2.HandleInput(kbstate);
}

我想让类保持一个状态,例如Class1有一个属性isActive,如果为false,将导致活动类转移到另一个类(比如Class2)——也就是说,主程序中的变量
currentClass
将更改为Class2,因此输入将被重定向到这个类

我可以使用另一个if语句(在主程序中),检查每个类中isActive的内容并更改该类当前是否处于非活动状态,但由于我想在游戏(w/monogame)上执行此操作,此代码将每秒执行60次,这是一种浪费

现实生活中的应用是,一旦单击主菜单上的“开始游戏”按钮,从StartMenu类处理输入更改为MainGame类处理输入

有没有人能在不反复检查变量变化的情况下实现这一点

我也很确定这是糟糕的代码设计,但我不知道更好的方法,所以如果有人能提出更好的方法,我将不胜感激


提前感谢您。

如果您的类相似,您可以研究接口甚至继承

基本上,您不需要将当前类保存在字符串中

interface IGameClass
{
    void HandleInput();
}

class Class1: IGameClass ...
class Class2: IGameClass ...

KeyboardState kbstate = Keyboard.State();

Class1 class1 = new Class1;
Class2 class2 = new Class2;

IGameClass CurrentClass = class1; // Set this instead of string

CurrentClass.HandleInput(kbstate);

关于经常性的bool检查,您可以在设置isactive bool时将property与backing字段一起使用,并更改当前类


谢谢你的帮助,我不知道接口。在您为循环布尔检查位提供的代码中,CurrentClass/class1/class2都在class1中,因此无法在该上下文中访问它们,因为它们是在main中定义的,这意味着它无法更改CurrentClass。我该怎么处理呢?你可以让这些字段是静态的。
class Class1
{
    int _isActive;
    public bool IsActive
    {
        get
        {
            return this._isActive;
        }
        set
        {
            this._number = value;
            
            // Sample logic
            if(value)
            {   
                CurrentClass = class1;
            }
            else 
            {
                CurrentClass = class2
            }
        }
    }
}