版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
相信很多刚接触C#或者unity的同学,都会看到很多这样那样的函数,带有ref ,out 或者params的参数,今天我就来讲一讲这三者的使用和区别:
ref
直接来看看实现的代码
public void UpdateScore(ref int score)
{
score = UnityEngine.Random.Range(80, 100);
}
我使用unity在start里面调用测试
void Start()
{
int myscore = 60;
UpdateScore(ref myscore);
print(myscore);
}
看看打印结果:
有C语言或者C++基础的同学可能看出来了,这不就像C语言的指针变量吗?是的,这跟指针变量差不多,其实这是C#的参数引用传递,在方法中对参数所做的任何更改都将反映在该变量中
什么时候使用ref关键字呢
我理解:有时候我们不需要执行完这个方法就可以改变参数的值,或者想要改变的参数值比较多的时候
out
看看代码实现:
public void GetScore(out int score)
{
score = UnityEngine.Random.Range(80, 100);
}
调用
void Start()
{
int score;
GetScore(out score);
print(score);
}
结果:
其实out跟ref编译原理是一样的,区别就是ref需要先初始化值,而out不需要,总结起来就是ref 有进有出,out只出不进
out什么时候使用呢
我理解:用在没有返回值的函数就能返回值,例如在返回值是void的函数就能返回,还有就是我们经常使用的都是返回一个值的,那么我们如果想在一个函数中返回多个值呢?那么out就起作用了,我们可以使用out返回多个值
params
看看代码实现
public void Getdd(params int[] pp)
{
foreach (var p in pp)
{
print(p);
}
}
调用
void Start()
{
Getdd(1,2,3);
}
结果:
是不是感觉有些不同,我们以往传递数组的时候,是不是不是这样传递的,params是为动态数组而准备的,我们直接输入数组的元素就行了,如果不加params,我们只能这样调用
public void Getdd( int[] pp)
{
foreach (var p in pp)
{
print(p);
}
}
void Start()
{
Getdd(new []{1,2,3});
}
希望大家好好理解一下,也可以多看看unity系统函数,加深理解,这一篇完毕,如果对大家有用,关注或者点赞我