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,但是按照您所说的,假设较少并根据需要打开会更安全。