永发信息网

ref和out的区别

答案:5  悬赏:40  手机版
解决时间 2021-03-29 05:01
ref和out的区别
最佳答案
两者词性不同,释义也不同
ref是名词中文释义裁判员,out可做副词可做动词
英: [ref]美: [rɛf]n.裁判员;
例句:

The ref is placing the ball for a free kick to the visiting team.
裁判员正在安排让客队罚任意球。

out  英: [aʊt]美: [aʊt]

adv.出局; 在外,在外部; 完全,彻底; 出版;
prep.(表示来源)从; (从…里)出来; (表示不在原状态)脱离; 离去;

例句:

Two of his biggest competitors are out of the ball game.
他的两大劲敌出局了。
复数:outs

全部回答
长话短说吧,
ref是必需要先初始化才能用,但调用时可以对它什么也不做.
out可以不初始化也能用,但调用时一定要对其赋值(即使已经初始化的也要赋值,哪怕是赋一个和原来一样的值).
还是以例子来表明吧;
1. ref:
int i =0;
有函数fun(ref i)和fun(i)
它们的函数体都是{ i = 3;},那么在执行以下两段代码后:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(1)的输出是1,(2)的输出是3,
2. out:
int i; //注意,这样个里就是声明了变量i,并木有对其初始化
有函数fun(ref i)、fun(out i)和fun(i)
它们的函数体都是{ i = 3;},那么在执行以下三段代码后:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(3)int i = 0; fun(out i); System.Console.WriteLine(i.ToString());
(1)和(2)在编译的时候都会报错:不准确 CS0165: 用了未赋值的局部变量“i”
而(3)能正常编译,而且输出3
最后总结一次:
Ref和Out这样个2个关键字都能够提供相似的功效,其作用也很像C中的指针变量。稍有不相同之处是:
用Ref型参数时,传入的参数必须先被初始化。而Out则不要要,对Out而言,就必须在方法中对其完成初始化。
用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
Out更适合用在要要Return多个返回值的地方,而Ref则用在要要被调出使用的方法修改调出使用者的引用的时候。
最近在许多论坛上看到关于了ref和out的区别,发现解释的都不非常理想。
我想抄写点官方的解释,然后再来我自己的解释
//如下
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。
属性不是变量,不能作为 ref 参数传递。
//上面的理解起来非常不好理解。下面我说说我自己的看法。
首先:两者都是按地址传递的,使用后都将改变原来的数值。很多人在论坛上解释说out是按数值传递,是错误的。简单的测试后可以知道out使用也能改变数值的,所以肯定是按照地址传递的。
其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。经典!!!

out与ref区别:
1、使用ref型参数时,传入的参数必须先被初始化,对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字,以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
4、ref传进去的参数在函数内部可以直接使用,而out不可。
5、系统对ref的限制是更少一些的。

6、若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法,ref 参数的值被传递到 ref 参数。


7、当希望方法返回多个值时,声明 out 方法非常有用;使用 out 参数的方法仍然可以返回一个值。


扩展资料:
ref和out语法区别:

1、ref传进去的参数必须在调用前初始化,out不必。
即:
int i;SomeMethod( ref i );//语法错误

SomeMethod( out i );//通过

2、ref传进去的参数在函数内部可以直接使用。
而out不可:

public void SomeMethod(ref int i)

{int j=i;//通过//...}

public void SomeMethod(out int i)

{int j=i;//语法错误}

参考资料:百度百科-c#
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
一个人工湖的湖面面积是2.8万?用什么单位名
在德化憨鼠社区中如何发帖?
唱吧里面的对白,什么情况?
看明朝皇帝们见过没见过的御窑瓷器
美国和犹太人重要节假日的日期
"溪林敛曙色,群鸟噪春来.谁谓南枝劲,寒梅战
单选题作为一名有理想、有责任感的青年学生,
妯娌不和我说话老是跟我老公说话对他很好
04款本田雅阁故障码48-05 A/F传感器s1 AF
澳大利亚电压是多少伏
想开一家豆当家,选址上有什么要求吗?
求发银魂同人小说文包!越多越好!绝对不要原
我想注册一个常用的电子邮箱,就是在爱奇艺里
三星 2016版 galaxy on5 g5700 用什么样的sim
大学物理求图中第六题解决方法。谢谢
推荐资讯
民间借贷利息问题
48×25又用了乘法分配律请讲解一下
半个圆圈拖尾巴填单韵母
lol炮台怎么玩
《龙剑仙缘》txt全集下载
从相见到相识到相知写作文用什么题目
金歌地址好找么,我有些事要过去,
Ruby 请问翻译成中文是什么意思
当年阿琳那个视频
海南岛直径到日本岛有多远
我买了20双短丝袜,穿低跟皮鞋,根本不好走,
二川家具店地址在哪,我要去那里办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?