Ref参数传值过程。

深呼吸丶 2014-06-04 05:26:07
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RefOut
{
class Program
{
static void Main(string[] args)
{
int i = 0;
SetInt(i);
Console.WriteLine("普通传值方法外:i="+i);

i = 0;
SetRefInt(ref i);
Console.WriteLine("REF传值方法外:i="+i);
}

private static void SetInt(int i)
{
i = 10;
Console.WriteLine("普通传值方法内:i="+i);
}
private static void SetRefInt(ref int i)
{
i = 10;
Console.WriteLine("REF传值方法内:i="+i);
}
}
}

运行结果:
为什么普通传值方法外面的:i=0;方法里面的i=10;
REF传值的时候我给i重新赋值为0,而结果都还是10呢??
...全文
331 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2014-06-05
  • 打赏
  • 举报
回复
不同地方定义的变量,即使名称相同,那也是两个不同的变量,而用 ref 可以完成穿越,并且可以用不同的变量名称。
qq_15457465 2014-06-05
  • 打赏
  • 举报
回复
普通传值是0是因为你没有赋值, 后面ref变了因为刷新了啊,不然要ref干嘛。。。
深呼吸丶 2014-06-05
  • 打赏
  • 举报
回复
引用 4 楼 ruanwei1987 的回复:
其实你把 i 定义成一个引用类型,那么两个输出是一样的。
是一样的。前面的普通传值int类型的i可不可以理解成在方法里面就是引用类型。
國木國木糯 2014-06-04
  • 打赏
  • 举报
回复
引用 2 楼 CalmHear 的回复:
值类型是传本身原值,为什么REF传值的时候我重新给i赋值为0,后面输出的结果依然是10呢?
引用就是对同一个对象进行操作,先设0,函数里面有设10,当然结果就是10了
ruanwei1987 2014-06-04
  • 打赏
  • 举报
回复
其实你把 i 定义成一个引用类型,那么两个输出是一样的。
ruanwei1987 2014-06-04
  • 打赏
  • 举报
回复
重新给i赋值为0,后面输出的结果依然是10呢 执行顺序为 i=0; i=10; Console.WriteLine("REF传值方法内:i="+i); Console.WriteLine("REF传值方法外:i="+i);
深呼吸丶 2014-06-04
  • 打赏
  • 举报
回复
值类型是传本身原值,为什么REF传值的时候我重新给i赋值为0,后面输出的结果依然是10呢?
漫天雪飞 2014-06-04
  • 打赏
  • 举报
回复
ref 传的是引用,也就是地址. 值类型传值是传的该值的副本.

110,552

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧