一个C#引用函数的问题!
今天试了个简单的程序:
class MainProg
{
public static void Main()
{
MainProg man = new MainProg();
int x= 1;
System.Console.WriteLine( "x的初始值是:{0} ",x);
man.AddFive(x);
System.Console.WriteLine( "After AddFive:{0} ",x);
man.AddFiveRef(ref x);
System.Console.WriteLine( "After AddFiveRef:{0} ",x);
man.AddFiveOut(out x);
System.Console.WriteLine( "After AddFiveOut:{0} ",x);
}
public void AddFive(int i)
{
i+=5;
}
public void AddFiveRef(ref int i)
{
i+= 5;
}
public void AddFiveOut(out int i)
{
i= 5;
}
}
运行结果为什么是这样的:
---------- Run C# Inside ----------
x的初始值是:1
After AddFive:1
After AddFiveRef:6
After AddFiveOut:5
输出完成 (耗时: 2 秒) - 正常终止
为什么After AddFiveRef后的值是6而不是2?
------解决方案--------------------因为传入man.AddFive(x);的x,在函数中修改后,是不能反映到外层函数的。在AddFiveRef(ref x)后,x的值被函数修改后,反映到调用层。
当一个值类型的参数传入函数后,怎么修改都不会影响调用层的。out的修饰符也差不多。
建议细读一下msdn的相关描述。
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/b8a5e59c-907d-4065-b41d-95bf4273c0bd.htm
说一下:
int i=0;
AddFive(i);
// 这是i=0
AddFiveRef(ref i);
// i=函数付的值
// i=888888;
// 无论这个函数怎么复制,调用后i还是原来值。
public void AddFive(int i)
{
i=99999999;
}
public void AddFiveRef(ref int i)
{
i=888888;
}