为什么我的浮点数是另一个浮点数的镜像而不是有自己的值?

Why is my float mirroring another float instead of having its own value?

我不确定问题是否足够清楚,所以我会展示代码和实际发生的事情。代码相关部分摘录如下:

public class MyClass : BaseClass
{
   public override void UpdateValue() // This is the base class' abstract method.
   {
      MyObject obj = GetObject();
      OriginalValue = obj.Value;
      obj.SetValue(this.Value);  // I know "this." is not needed here. It's just for this exerpt's readability.
   }

   public float OriginalValue { private set; get; }

   public float Value
   {
      set
      {
         this.value = value;
         {...}
      }
      get => value;
   }

   public MyObject GetObject() => {...}

   private float value;
}

public class MyObject
{
   public float Value
   {
      set
      {
         if {...}
         else SetValue(value);
      }
      get => value;
   }

   internal void SetValue(float value) => this.value = value;

   private float value;
}

如您所见,我的意图是在每次调用 MyClass.UpdateValue() 时保留 MyObject 的原始值,以便以后可以恢复它。但是,发生的情况是 MyClass.OriginalValue 将始终具有与 MyObject.Value.

相同的值

例如,MyObject.Value 当前为 10,MyClass.Value 为 15。这意味着一旦调用 MyClass.UpdateValue()MyClass.OriginalValue 应为 10,MyObject.Value 应该是 15。相反,MyClass.OriginalValue 也将是 15。即使我在方法中添加另一个 obj.SetValue(x),使 OriginalValue 成为 x,这仍然会发生而不是对象的原始值。

所以,我的问题是:MyClass.OriginalValue 真的是 MyObject.Value 的镜像吗?如果不是,这是怎么回事?我该如何解决这个问题?

感谢任何帮助。谢谢。

发布的代码没有任何异常...

最简单的解释可能是 UpdateValue()MyObjectValue 设置后被调用。

我建议你尝试在 UpdateValue()MyObject.Value 中设置一些断点,看看最后调用哪个...