全局变量在计算后无法在其它类文件中保持其值?
这个问题很难描述,
总之,是在B.cs定义多个全局变量N,M,E,定义多个函数,每个函数计算一个全局变量的结果并return该全局变量。下一个函数计算时需要用到上一个函数计算出的全局变量的值。也就是不断用之前的计算结果进行计算。最后一个函数计算E的值。
但在A.cs窗体文件中只调用B.cs文件中的最后一个函数时,E运行结果出现错误。
在检查错误时,通过在B.cs最后一个函数中写入代码:
MessageBox.Show("N: " + N.ToString());或
MessageBox.Show("M: " + M.ToString());后
再次运行程序
发现N和M的结果均为0。
觉得时全局变量无法在同一类文件另一个函数中保持值,或者无法在另一个类文件中保持值,但经过查阅资料后,发现全局变量可以在同一类文件保持值。
解决方法
需要在A.cs中调用运算N和M的函数,
A.CalculateN(processedLines);
A.CalculateM(processedLines, this);
double E = A.CalculateE(processedLines);
这样的话,M,N的值才可以正常正确显示,而不是默认为0;
E才可以在A.cs中正常计算。
同理若想正确计算出M的值也必须在A.cs中加上A.CalculateN(processedLines);否则N的数值默认为0;
我的理解是B.cs中定义的全局变量N,M无法在A.cs中使用,需要在A.cs中调用相关函数后,M,N的数值才可以在CalculateE函数中运用。
也就是如果不调用CalculateN,CalculateM只调用CalculateE的话,CalculateN,CalculateM两个函数只是在B.cs里面躺着,并没有实际运用,也就不存在计算N,M的值了。
可是CalculateE用了N,M的值,为何在A.cs里调用时,无法自动运行与之相关的CalculateN,CalculateM两个函数?感觉自己还是不太清楚其内在的运行机理。😓
希望有明白的大佬可以帮忙解答一下🌹
关于全局变量的一点介绍
要确保一个变量在执行完函数后仍然保持其值,需要将这个变量定义在函数外部,也就是作为一个类的成员变量或者全局变量。
全局变量通常指的是定义在函数外部,作用域为整个程序集的静态变量。
实际编程中,过度使用全局变量可能会导致代码难以理解和维护,因此更好的做法是将变量定义在合适的类中作为成员变量。
也就是:(在B.cs中)
public class B
{
// 定义类的成员变量N,M
private double N;
private double M;
}
N和M
被定义为一个私有成员变量(使用private
修饰符),这意味着它只能在A
类的内部被访问。
在CalculateN
函数中,计算出的N
值被赋给了这个成员变量,因此即使函数执行完毕后,N和M
的值仍然会保留在类的实例中。在A类的实例的整个生命周期内都存在,并且可以在类的任何方法中使用。
在上面A.cs的代码示例中,补充:
// 创建A类的实例
A calculations = new A();
A.CalculateN(processedLines);
A.CalculateM(processedLines, this);
// 此时,即使CalculateN函数和CalculateM函数已经执行完毕,
// calculations对象的N,M成员变量仍然保留着计算出的值
double E = A.CalculateE(processedLines);