今天试了个简单的程序:
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?
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?
解决方案 »
- 树节点重新命名 显示路径
- VS2005中我把控件定义成静态的,每次修改一些数据口,它都会自动变回非静态的,如何解决?
- VS打包超级难题:如何按照顺序一个接一个安装exe(顶有分,一定要解决!)
- 如何让C#中类的成员变量按照定义的顺序出现,而并非默认的字母顺序。
- 世界上除了微软开发的asp.net官方论坛到底有没有真正的开源论坛程序!!!
- 关于DEX控件,请知道的达人,帮忙下。谢谢
- 请经验丰富的高手为我解答?
- 一个滚动条的问题?
- 怎么才能显示生成ConnectionString的那个ole db的对话框?
- Ms 是不是不继续开发MFC了??
- vs2005 ***有关用户控件问题!*****为什么把用户控件拖到主页面的表格后..........
- *********关于DataGRID显示树的问题?****************
当一个值类型的参数传入函数后,怎么修改都不会影响调用层的。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=0AddFiveRef(ref i);
// i=函数付的值
// i=888888;// 无论这个函数怎么复制,调用后i还是原来值。
public void AddFive(int i)
{
i=99999999;
}public void AddFiveRef(ref int i)
{
i=888888;
}