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