首页 > 解决方案 > 为什么我的浮动镜像另一个浮动而不是有自己的价值?

问题描述

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

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

如您所见,我的意图是在MyObject每次调用时都保留 ' 的原始值MyClass.UpdateValue(),以便以后可以恢复它。但是,会发生的情况是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吗?如果不是,那是怎么回事?我该如何解决这个问题?

任何帮助表示赞赏。谢谢你。

标签: c#referencefloating-point

解决方案


发布的代码没有任何奇怪的事情发生......

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

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


推荐阅读