1

我想从我的基类中调用一个方法,该方法也有一个来自基类的变量:

    class BaseClass
    {
    public string BaseClassMethod()
    {
        if (CheckKeyboard(Keys.Up))
            return "Up";

        if (CheckKeyboard(Keys.Down))
            return "Down";

        if (CheckKeyboard(Keys.Enter) && keyboardOn == true) <-- keyboardOn is a variable from my BaseClass that i want to be able to use :/
        {
            counter = 0; <-- counter is also one of those variables
            return "Enter";
        }

        return "";
    }
    }

    class InheritFromBase : BaseClass
    {
    public string Update()
    {
        currentKeyboard = Keyboard.GetState();
        currentMouse = Mouse.GetState();

        if (BaseClassMethod() == "Up")
            if (selected > 0)
                selected--;
            else
                selected = buttonList.Count - 1;

        if (BaseClassMethod() == "Down")
            if (selected < buttonList.Count - 1)
                selected++;
            else
                selected = 0;

        if (BaseClassMethod() == "Enter")
            return buttonList[selected];

        previousKeyboard = currentKeyboard;
        previousMouse = currentMouse;

        return "";
    }
    }

并且由于我从另一个类调用该方法,因此似乎无法访问他的变量(值)然后更改它们。请帮助:)谢谢

4

4 回答 4

0

您可以使用protected 访问修饰符来允许从派生类访问变量。

例如:

protected bool keyboardOn = false;

或者

您可以像这样使它们成为基类的公共属性:

 public bool KeyboardOn { get; set; }
于 2012-04-24T17:56:58.817 回答
0

在类之外公开局部变量通常是不好的做法。您可以通过受保护的访问修饰符来做到这一点,但是我建议您通过protected属性或方法公开它。

假设keyboardOn是您的基类中的类级变量:

public class BaseClass
{
    private bool keyboardOn;

    protected bool KeyboardOn;
    {
        get
        {
            return this.keyboardOn;
        }
    }    
}    

public class InheritFromBase : BaseClass
{
    ....

    if(this.KeyboardOn)
    {
        // do something based on base property
    }

    ....
}

以上假设您只想从基类中get获取状态变量。keyboardOn如果您还需要从继承类中设置变量的值,您可以将 a 添加set到公开属性中。

于 2012-04-24T17:58:33.577 回答
0

您需要通过将这些变量设为公共(不要)或编写一个返回它的 getter 方法(执行)来使这些变量在您的基类中成为全局且可访问的。然后在继承类中,做:MyBase.getVariable()获取变量或者MyBase.function()调用基类中的函数。

于 2012-04-24T17:58:41.097 回答
0

您可以像这样在您的超类中创建一个公共吸气剂:

public bool isKeyboardOn() {
    return keyboardOn;
}

这样您就不必公开变量,并且与将变量设置为受保护的不同,您不会冒被任何其他类更改变量的风险。

于 2012-04-24T17:59:06.073 回答