C#变量的继承及其修改
C# Inheritance of variables and its modification
我有以下控制摘要 class,其中定义了一些公共变量、字段和方法。 ClickState 是一种 emum 类型。然后我派生了按钮 class,因为我不需要任何额外的行为,所以我没有覆盖 Update 方法,所以我使用基本的。
public abstract class Control
{
private ClickState _clickState;
public Control()
{
_clickState = CliskState.Start;
}
public virtual void Update()
{
if(***some check if mouse is over the control***)
{
_clickstate = ClickState.MouseOver;
}
}
}
public class Button : Control
{
///other code
}
...
b = new Button();
每帧:
b.Update();
现在,当我将鼠标悬停在我的按钮上时,更新方法(每帧调用)中的检查实际上有效,但不知何故 _clickState 变量没有改变。如果我在赋值后在代码中放置一个断点,我会看到 Control class 的 _clickState 变量发生了变化,但 Button 中的变量没有变化......我很困惑,我认为 Button._clickState 应该与它的“母亲”相同 class 控制 since 是继承的。某些访问修饰符有问题吗?
谢谢你的帮助。
您的理解是正确的,我相信您的代码也能正常工作。
或者你没有展示一些可能会做一些改变的代码。
请确保您的 Button class.
中没有另一个 _clickState 字段
这是我的代码版本:https://dotnetfiddle.net/OKdSnj
尝试在您的 IF 语句中添加控制台输出以查看 real-time 中的所有值 - 它可能有助于您进行故障排除。
if(/*some check if mouse is over the control*/)
{
_clickState = ClickState.MouseOver;
// Try to add console output to see all values here
Console.WriteLine($"New state: {_clickState}");
}
我有以下控制摘要 class,其中定义了一些公共变量、字段和方法。 ClickState 是一种 emum 类型。然后我派生了按钮 class,因为我不需要任何额外的行为,所以我没有覆盖 Update 方法,所以我使用基本的。
public abstract class Control
{
private ClickState _clickState;
public Control()
{
_clickState = CliskState.Start;
}
public virtual void Update()
{
if(***some check if mouse is over the control***)
{
_clickstate = ClickState.MouseOver;
}
}
}
public class Button : Control
{
///other code
}
...
b = new Button();
每帧:
b.Update();
现在,当我将鼠标悬停在我的按钮上时,更新方法(每帧调用)中的检查实际上有效,但不知何故 _clickState 变量没有改变。如果我在赋值后在代码中放置一个断点,我会看到 Control class 的 _clickState 变量发生了变化,但 Button 中的变量没有变化......我很困惑,我认为 Button._clickState 应该与它的“母亲”相同 class 控制 since 是继承的。某些访问修饰符有问题吗? 谢谢你的帮助。
您的理解是正确的,我相信您的代码也能正常工作。
或者你没有展示一些可能会做一些改变的代码。
请确保您的 Button class.
这是我的代码版本:https://dotnetfiddle.net/OKdSnj
尝试在您的 IF 语句中添加控制台输出以查看 real-time 中的所有值 - 它可能有助于您进行故障排除。
if(/*some check if mouse is over the control*/)
{
_clickState = ClickState.MouseOver;
// Try to add console output to see all values here
Console.WriteLine($"New state: {_clickState}");
}