【问题标题】:Access a variable from one method in another从另一种方法中访问变量
【发布时间】:2019-07-31 12:20:00
【问题描述】:

我知道以前有人问过这个问题,但我仍然无法弄清楚,这些答案也无济于事。我需要知道如何完全按照下面的代码显示但成功。

public void ProgressBar_MouseDown(object sender, EventArgs e)
{
     int somevariable;
}

public void ProgressBar_MouseUp(object sender, EventArgs e)
{
     int anothervariable = somevariable;
}

【问题讨论】:

标签: c#


【解决方案1】:
private int _somevariable;
public void ProgressBar_MouseDown(object sender, EventArgs e)
    {
         //changing _somevarible
    }

public void ProgressBar_MouseUp(object sender, EventArgs e)
    {
         int anothervariable = _somevariable;
    }

局部变量仅在方法执行期间存在。

【讨论】:

    【解决方案2】:

    采取你的方法,

    public void ProgressBar_MouseDown(object sender, EventArgs e)
    {
         int somevariable;
    }
    

    把这个方法想象成一个带有输入和输出的黑盒子——你可以将数据放入和接收数据,但你不知道盒子里面发生了什么。

    因此,当您在方法内创建 int someVariable 时,代码中的任何其他内容都无法“看到”这个。

    要解决这个问题,您应该在类中使用变量,如下所示:

    public class Program
    {
        private int somevariable;
    
        public void ProgressBar_MouseDown(object sender, EventArgs e)
        {
            // Operate on somevariable
        }
    
        public void ProgressBar_MouseUp(object sender, EventArgs e)
        {
            int anothervariable = somevariable;
        }
    }
    

    如果我们回到黑匣子的类比,现在想象它有一个只能向外看的窥视孔。因此,您的方法(黑框)可以查看类并“看到”int somevariable,但其他对象仍然无法查看方法内部。

    您也可以在方法之间传递somevariable,但是从外观上看,您是在响应 UI 事件,因此不能轻易做到这一点。

    【讨论】:

      【解决方案3】:

      因此,您有 2 个不同的事件被 2 个不同的操作调用。所以基本的答案是你不能直接将一个动作的值传递给另一个动作。为此,您需要将“_somevariable”声明为全局变量,但在 C# 中我们没有,因此下一个最佳解决方案是使用静态类和静态变量。

      操作 1:鼠标按下调用的 ProgressBar_MouseDown

      动作 2:Mouse UP 调用的 ProgressBar_MouseUp

      public static class GlobalVariables
      {
          public static int somevariable { get; set; }
      }
      
      public void ProgressBar_MouseDown(object sender, EventArgs e)
      {
          //changing _somevarible
          //somevarible=set your value here
      }
      
      public void ProgressBar_MouseUp(object sender, EventArgs e)
      {
          //int anothervariable = somevariable;
          //here you should be able to access the somevariable
      }
      

      【讨论】:

      • Static 表示该值将在所有实例之间共享。也许在这种特殊情况下这不是问题,但为什么不使用类级别的字段呢?
      • 一个类级别的字段可以工作(如果应用程序很简单并且所有事件都来自同一个类),但假设用户需要解决复杂应用程序的业务问题。这两个事件很可能不在同一个类中,或者我们可能有额外的限制,因此最好将数据存储为静态数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      相关资源
      最近更新 更多