6.2.2 参数和返回值与全局数据
本节将详细介绍如何通过全局数据以及参数和返回值与函数交换数据。先看看下面的代码:
class Program { static void ShowDouble(ref int val) { val *= 2; Console.WriteLine("val doubled = {0}", val); } static void Main(string[] args) { int val = 5; Console.WriteLine("val = {0}", val); ShowDouble(ref val); Console.WriteLine("val = {0}", val); } }
和下面的代码比较:
class Program { static int val; static void ShowDouble() { val *= 2; Console.WriteLine("val doubled = {0}", val); } static void Main(string[] args) { val = 5; Console.WriteLine("val = {0}", val); ShowDouble(); Console.WriteLine("val = {0}", val); } }
这两个ShowDouble()函数的结果是相同的。
首先,在第一次讨论这个问题时,使用全局值的ShowDouble()版本只使用全局变量val。为了使用这个版本,就必理使用这个全局变量。这会对该函数的多样性有轻微的限制,如果要存储结果,就必须总是把这个全局变量值复制到其他变量中。另外,全局数据可以在应用程序的其他地方由代码修改,这会导致预料不到的结果(其值可能会改变,等我们认识到这点时为时已晚)。
但是,损失了多样性常常是有好处的。我们常常希望把一个函数只用于一个目的,使用全局数据存储能减少在函数调用中犯错的可能性,例如把它传递给错误的变量。
当然,也可以说,这种简化实际上使代码更难理解。显式指定参数可以一眼看出发生了什么改变。如FunctionName(val1, out val2)函数调用,其中val1和val2都是要考虑的重要变量,在函数执行结束后,val2就全被赋予一个新值。反之,如果这个函数不带参数,就不能对它处理了什么数据。
总之,可以自由选择使用哪种技术来交换数据。一般情况下,最好使用参数,而不使用全局数据,但有时使用全局数据更合适,使用这种技术并没有错。
时间: 2024-10-12 18:57:57