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