参数和返回值与全局数据

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赋予一个新值。反之,如果这个函数不带参数,就不能对它处理了什么数据做任何假设。

总之,可以自由选择使用哪种技术来交换数据。一般情况下,最好使用参数,而不使用全局数据,但有时使用全局数据更合适,使用这种技术并没有错。



目前还没有评论
添加一条新评论

登录后可以发表评论 去登录