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

C# 如何使用基类中的变量从基类调用方法?,c#,oop,class,variables,inheritance,C#,Oop,Class,Variables,Inheritance,我想从基类中调用一个方法,该方法也包含基类中的一个变量: class BaseClass { public string BaseClassMethod() { if (CheckKeyboard(Keys.Up)) return "Up"; if (CheckKeyboard(Keys.Down)) return "Down"; if (CheckKeyboard

我想从基类中调用一个方法,该方法也包含基类中的一个变量:

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

    ....
}
类基类
{
公共字符串BaseClassMethod()
{
如果(选中键盘(向上键))
返回“向上”;
如果(选中键盘(向下键))
返回“向下”;

如果(CheckKeyboard(Keys.Enter)&&keyboardOn==true)您可以使用
protected
来允许从派生类访问变量

例如:

protected bool keyboardOn = false;

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

 public bool KeyboardOn { get; set; }

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

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

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

    ....
}

以上假设您只想从基类
获取状态变量
keyboardOn
。如果您还需要从继承类设置变量的值,您可以向exposing属性添加一个

您需要通过使这些变量为使用public(不)或编写一个getter方法返回它(do)。然后在继承类中,do:
MyBase.getVariable()
获取变量,或
MyBase.function()
调用基类中的函数。

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

public bool isKeyboardOn() {
    return keyboardOn;
}

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

成员变量是否标记为
私有
?如果您试图在
更新
方法中访问
计数器
,请确保它是
受保护的
为什么不要将受保护的属性仅与getter一起使用。我认为更好的结构,因为方法往往描述更复杂的功能,而属性是简单的访问器。@KP。这同样有效。我看到您已相应地编辑了答案,因此答案已经涵盖,我将保留此答案作为替代。是的,您在g上提出了一个很好的观点我首先假设继承类将需要get/set,但是按照您所说的,假设较少并根据需要打开会更安全。