ref有进有出 将一个变量传入一个函数中进行"处理","处理"完成后,再将"处理"后的值带出函数。 out 只出不进 定义变量的值不变,不经过方法,传出变量的新值
ref
:有进有出
ref
参数是双向的,既能带入初始值(有进),也能返回修改后的值(有出)。使用 ref
参数时,传递给方法的变量必须已经被初始化。
using UnityEngine;
public class RefExample : MonoBehaviour
{
void Start()
{
int number = 5;
Debug.Log("Before method call: " + number); // 输出: Before method call: 5
ModifyNumber(ref number);
Debug.Log("After method call: " + number); // 输出: After method call: 10
}
void ModifyNumber(ref int num)
{
num *= 2; // 修改传入的参数
}
}
在这个例子中,number
的初始值是 5(有进),在方法 ModifyNumber
中被修改为 10(有出)。
out
:只出不进
out
参数是单向的,只能用于返回数据(只出)。使用 out
参数时,传递给方法的变量不需要初始化,因为方法内部必须为 out
参数赋值。
using UnityEngine;
public class OutExample : MonoBehaviour
{
void Start()
{
int result;
Debug.Log("Before method call: result is uninitialized");
CalculateSquare(5, out result);
Debug.Log("After method call: " + result); // 输出: After method call: 25
}
void CalculateSquare(int number, out int square)
{
square = number * number; // 方法内部必须赋值
}
}
在这个例子中,result
在方法调用前没有初始化(不进),在方法 CalculateSquare
内部被赋值为 25 后返回(只出)。
总结
ref
是双向的,有进有出:参数在进入方法时携带初始值,方法可以修改参数的值并返回给调用者。out
是单向的,只出不进:参数在进入方法时不需要携带初始值,方法必须为参数赋值并返回给调用者。
这两种参数修饰符适用于不同的场景:当你需要一个方法修改传入的参数值时,使用 ref
;当你需要一个方法返回多个值时,使用 out
。
params
参数
params
参数用于传递可变数量的参数。它允许你传递一个参数数组,或者不定数量的参数。params
参数必须是方法的最后一个参数。
using UnityEngine;
public class ParamsExample : MonoBehaviour
{
void Start()
{
PrintNumbers(1, 2, 3, 4, 5); // 输出: 1 2 3 4 5
PrintNumbers(10, 20); // 输出: 10 20
}
void PrintNumbers(params int[] numbers)
{
foreach (int number in numbers)
{
Debug.Log(number + " ");
}
}
}