如何使用基类中的变量从基类调用方法?

时间:2012-04-24 17:54:10

标签: c# oop class variables inheritance

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

    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 "";
    }
    }

因为我从另一个类调用了mothod,所以似乎无法访问变量(值)然后更改它们。 请帮忙:)谢谢

4 个答案:

答案 0 :(得分:0)

您可以使用protected access modifier来允许从派生类访问变量。

例如:

protected bool keyboardOn = false;

OR

您可以将它们设为基类的公共属性,如下所示:

 public bool KeyboardOn { get; set; }

答案 1 :(得分:0)

在类外部公开局部变量通常是不好的做法。您可以通过protected访问修饰符来执行此操作,但我建议您通过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。如果您还需要从继承类设置变量的值,则可以向公开属性添加set

答案 2 :(得分:0)

您需要将这些变量设置为全局且可在基类中访问,方法是将它们设为public(不)或编写返回它的getter方法(do)。然后在继承类中,执行:MyBase.getVariable()获取变量,或MyBase.function()调用基类中的函数。

答案 3 :(得分:0)

您可以在超类中创建一个公共getter,如下所示:

public bool isKeyboardOn() {
    return keyboardOn;
}

通过这种方式,您不必公开变量,并且不像将变量设置为protected,您不会冒任何其他类更改变量的风险。