3 本我 3周前 121次点击
对比两个输出结果相同的示例
class Program
{
//定义函数:两倍
static void 两倍(ref int val)
{
val *= 2;
WriteLine($"两倍{val}");
}
static void Main(string[] args)
{
//声明变量val
int val = 5;
WriteLine($"val={val}");
//调用函数:两倍()
两倍(ref val);
WriteLine($"val={val}");
ReadKey();
}
}
和
class Program
{
//声明全局变量:val
static int val;
static void 两倍()
{
val *= 2;
WriteLine($"两倍{val}");
}
static void Main(string[] args)
{
//给全局变量val赋值
val = 5;
WriteLine($"val={val}");
//调用函数两倍
两倍();
WriteLine($"val={val}");
ReadKey();
}
}
使用哪种方法并没有什么硬性规定,这两种方法都十分有效,但需要考虑一些规则。
首先,在使用全局值的两倍()版本只使用全局变量val。为使用这个版本,必须使用这个全局变量。这会对该函数的灵活性有轻微的限制,如果要存储结果,就必须总是把这个全局变量值复制到其他变量中。另外,全局数据可能在应用程序的其他地方被代码修改,这会导致预料不到的结果(其值可能会改变,等我们认识到这一点时为时已晚)。
当然,也可以说,这种简化实际上使代码更难理解。显式指定参数可以一眼看出发生了什么改变。例如对于FunctionName(val1, out val2)函数调用,马上就可以知道val1和val2都是要考虑的重要变量,在函数执行完毕后,会为val2赋予一个新值。反之,如果这个函数不带参数,就不能对它处理了什么数据做任何假设。
总之,可以自由选择使用哪种技术来交换数据。一般情况下,最好使用参数,而不使用全局数据,但有时使用全局数据更合适,使用这种技术并没有错。