小白请教:C# ref关键字

lanytin 2008-10-30 10:45:20
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,
在方法中对参数所做的任何更改都将反映在该变量中。 若要使用 ref 参数,必须将参数作为 ref
参数显式传递到方法。ref 参数的值被传递到 ref 参数。 传递到 ref 参数的参数必须最先初始化。
将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。 属性不是变量,
不能作为 ref 参数传递。


大家能讲一下ref关键字吗?用你自己理解的、直白的语言表述,不要像上面官方的语言。
...全文
3463 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ja277520910 2012-07-19
  • 打赏
  • 举报
回复
这个例子举得好。比前几个人好多了[Quote=引用 14 楼 的回复:]

参数引用传递。

当传递的参数是值类型时,比如int,string,bool值。
该参数在方法中被修改时,函数外的变量不会变。
比如

int a=10;
test(a);

public test(int a)
{
a++;
}
执行完test(a)之后,a的值还是10,而不是11。
想让执行完后a的值为11那就用ref修饰符

int a=10;
test(……
[/Quote]
刘恒 2012-04-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

参数引用传递。

当传递的参数是值类型时,比如int,string,bool值。
该参数在方法中被修改时,函数外的变量不会变。
比如

int a=10;
test(a);

public test(int a)
{
a++;
}
执行完test(a)之后,a的值还是10,而不是11。
想让执行完后a的值为11那就用ref修饰符

int a=10;
test(……
[/Quote]


这个蛮形象滴!学习了!
Dobzhansky 2008-10-30
  • 打赏
  • 举报
回复
out 的肉, 进去后指定被搞一下
Dobzhansky 2008-10-30
  • 打赏
  • 举报
回复
补充:
内部可以对肉采取行动
Dobzhansky 2008-10-30
  • 打赏
  • 举报
回复
函数就好像一个黑洞, 参数就是你扔进去一根绳子栓着的肉,
当你希望能钓上非肉, 或者其他肉, 用 ref 或者 out
当只是为了送肉进去, 不关心绳子收上来时钩着什么时, 不用加修饰符, 这时绳子收上来时, 会把你当时挂的肉再挂上, 就好像你没往里放一样.

(一根绳子只能挂一块肉, 肉有类型之分)

ref out 的都可以在洞里挂东西, 不同的是 out 必须先初始化吧.

athena_lee 2008-10-30
  • 打赏
  • 举报
回复
ref 方法外对参数先赋值一个初始值,方法中修改该参数的值,并最终将修改后的值传出方法。
out 方法外仅需要声明,方法中赋值,并传出,我觉得有点象方法的返回值。
paulmake 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wojiushiliumang 的回复:]
int n 可以等于 "" 楼上的强人

out 和 ref 个人在用法上没发现什么区别

更深层次的没仔细联系过
[/Quote]
ref 的参数使用前必须赋值,out 的参数可以不赋值.其它一样
Code従業員 2008-10-30
  • 打赏
  • 举报
回复
引用调用参数

就是说,这个传递的是参数的实际地址,

当你的参数在方法中改变时,会影响到传进来的变量

比如说有个TEXT,如果是按值传递方法中做什么事情都和参数无关(参数不受影响)

但是按引用传递,方法中的参数值变了,TEXT也会跟着改变!
wojiushiliumang 2008-10-30
  • 打赏
  • 举报
回复
int n 可以等于 "" 楼上的强人

out 和 ref 个人在用法上没发现什么区别

更深层次的没仔细联系过
feiyun0112 2008-10-30
  • 打赏
  • 举报
回复
在方法中对参数所做的任何更改都将反映在传入的变量中

class RefExample
{
static void Method(ref int i)
{
i = 44;
}
static void Main()
{
int val = 0;
Method(ref val);
// val is now 44
}
}


*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
http://feiyun0112.cnblogs.com/
xian_yun80 2008-10-30
  • 打赏
  • 举报
回复
假如说,你在一个方法A中调用方法B
你想给A方法中的变量(或者是其他地方的变量)N通过方法B来获取值
这时就要用到ref关键字了
例:

public void A()
{
int n = "";
B(ref n);
//下面就可以用到 n 来作别的操作了
}

public void B(ref int n)
{
n = 1;//获取值过程
}


不知这样说清楚了没?
himner 2008-10-30
  • 打赏
  • 举报
回复
ref out参数结果是一样的。他们都是引用变量的内存地址,可以改变变量的值。不同的是:
ref必须在方法体外初始化
out必须在方法体内初始化
空白是我 2008-10-30
  • 打赏
  • 举报
回复
ref就是引用呀 貌似很好理解!
官方的解释也很清楚
楼上几位的例子也很详尽了!
good-code 2008-10-30
  • 打赏
  • 举报
回复
我的理解:
引用调用参数,也就数实参是已经定义好并且有初始的变量,并是用ref修饰。
然而形参也有ref修饰,并且形参的值改变会影响实参的值~
卧_槽 2008-10-30
  • 打赏
  • 举报
回复
参数引用传递。

当传递的参数是值类型时,比如int,string,bool值。
该参数在方法中被修改时,函数外的变量不会变。
比如

int a=10;
test(a);

public test(int a)
{
a++;
}
执行完test(a)之后,a的值还是10,而不是11。
想让执行完后a的值为11那就用ref修饰符

int a=10;
test(ref a);

public test(ref int a )
{
a++;
}
hubofly 2008-10-30
  • 打赏
  • 举报
回复
ref 就是你传到方法里面的时候,可以不行行任何操作返回;
out 就是你传到方法里面的时候,必须要进行赋值才能返回。
简单吧?
wackyboy 2008-10-30
  • 打赏
  • 举报
回复
ref 实参实例化
out 形参实例化
zhangfeigreat 2008-10-30
  • 打赏
  • 举报
回复
个人感觉和C++中的引用差不多
龙宜坡 2008-10-30
  • 打赏
  • 举报
回复
ref 按引用传递参数,在方法内部对此参数做的更改,将影响到原来的值!

110,567

社区成员

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

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

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