class Program { static void showDouble(ref int val) { val *= 2; Console.WriteLine("Val double = {0}", val); }
static void Main(string[] args) { int val = 5; Console.WriteLine("val = {0}", val); showDouble(ref val); Console.WriteLine("val = {0}", val);
} }
result: val = 5 val double = 10 val = 10 ######################################################################################################### class Program { static int val; static void showDouble(int val) { val *= 2; Console.WriteLine("Val double = {0}", val); }
static void Main(string[] args) { val = 5; Console.WriteLine("val = {0}", val); showDouble(val); Console.WriteLine("val = {0}", val);
} }
result: val = 5 val double = 10 val = 5 可以理解成全局变量val的值没有改变,ShowDouble里定义的val接受了全局变量val的值传递,所以改变的只有ShowDouble里定义的局部变量val。
######################################################################################################### class Program { static int val; static void showDouble(ref int val) { val *= 2; Console.WriteLine("Val double = {0}", val); }
static void Main(string[] args) { val = 5; Console.WriteLine("val = {0}", val); showDouble(ref val); Console.WriteLine("val = {0}", val);
} } result: val = 5 val double = 10 val = 10 ShowDouble函数的参数使用的ref关键字,所以是引用传递,所以全局变量val的值也改变了。
######################################################################################################### class Program { static int val; static void showDouble() { val *= 2; Console.WriteLine("Val double = {0}", val); }
static void Main(string[] args) { val = 5; Console.WriteLine("val = {0}", val); showDouble(); Console.WriteLine("val = {0}", val);
} }
result: val = 5 val double = 10 val = 10 在函数ShowDouble里没有定义val,所以函数使用的是全局变量val,在函数内改变全局变量val的值后,在函数外它的值也改变了
######################################################################################################### class Program { static int val; static void showDouble(int val) { val *= 2; Console.WriteLine("Val double = {0}", val); }
static void Main(string[] args) { int val = 5; Console.WriteLine("val = {0}", val); showDouble(val); Console.WriteLine("val = {0}", val);
} }
result: val = 5 val double = 10 val = 5 程序提示"Program.val" is never used.在Main中定义的局部变量val屏蔽了全局变量val。
#########################################################################################################
######################################################################################################### class Program { static int val; static void showDouble() { val *= 2; Console.WriteLine("Val double = {0}", val); }
static void Main(string[] args) { int val = 5; Console.WriteLine("val = {0}", val); showDouble(); Console.WriteLine("val = {0}", val);
} }
result: val = 5 val double = 0 val = 10 这里很有意思的,我觉得可以理解成在函数ShowDouble里由于没有定义val,所以在函数中使用的是全局变量,如果删掉static int val,程序就会报错,说函数中的val没有定义。函数外面的val使用的是局部函数int val = 5,这里因为有局部变量所以把全局变量屏蔽了。