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);
}
}

 

posted @ 2023-03-25 08:26  old_Host  阅读(25)  评论(0编辑  收藏  举报