out 和 ref + params 的理解

Posted zanzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了out 和 ref + params 的理解相关的知识,希望对你有一定的参考价值。

out 和 ref
在c#的底层经常可以看到用到 out 和 ref 这两个关键字 但是之前没做深入了解,只是看了一下他怎么用

之前理解到:(这只是out和ref的区别)
ref和out是成对使用的,形参和实参前面都需要添加的
使用ref传递参数的时候,ref修饰的参数必须要有值,
但是out可以使用一个未赋值的变量作为参数传递

现在理解的:
他们两个关键字都是用于允许引用传递
当你在一个方法里的参数前加上这两个参数之一的时候,那么你的参数将作为引用类型来操作
也就是说他的操作方式将是在堆上进行操作,传递的是该变量的一个地址,而不是他的值

 params(不同于out和ref 他不是成对出现的,只需要在形参前添加)

params比较简单,就是任意个数的参数,只要类型相同就可以

经过测试发现 params 参数的个数是 >= 0,就是说你传参数也是可以的

这个还是很快乐的 

===========================================================

我们在unity中随便来一个脚本

可以一起来验证一下以上的理论

 

 脚本我们挂在任意对象上

这是我得到的结果

 

 上面结论验证成功

脚本就放下面了

void Start()

int outValue;
//普通函数无法使用未赋值变量进行操作
//SimpleFunction(outValue); 这个是错误示例
OutFunction(out outValue);//out可以使用
print("out参数的操作:" + outValue);

int refValue = 1000;
RefFunction(ref refValue);//ref使用
print("ref参数的操作:" + refValue);

SimpleFunction(refValue);//普通函数
print("普通的操作:" + refValue);

ParamsFunction(11,33 ,25);//params自定义个数参数

private void SimpleFunction(int value)

value = Random.Range(0, 50);

private void OutFunction(out int value)

//out操作的value赋值使用复合运算符会提示使用了为赋值的变量
value = Random.Range(50, 100);

private void RefFunction(ref int value)

//ref操作的value可以使用复合运算符
value += 100;

private void ParamsFunction(params int[] arr)

print("ParamsFunction");
foreach (var item in arr)

print(item);

 

以上是关于out 和 ref + params 的理解的主要内容,如果未能解决你的问题,请参考以下文章

浅谈c#的三个高级参数ref out 和Params

浅谈c#的三个高级参数ref out 和Params

out ref 和 params 的区别和用法

ref out params

out ref params 的使用

csharp Out Ref Params