Ref 和 Out 的 共同点
- 都是将值通过引用的方式来进行传递的关键词
Ref 和 Out 的 不同点
-
Ref 进函数时必须初始化
void DoSomething() { int i = 1; Change(ref i); // i 的数值会进到 函数里面 去被更改,最后再出来 // 最终会导致里面的 i 的值为4 } void Change(ref int a) { a = 4; }
-
Out 可以不初始化,但 Out 一定要在函数内部进行赋值。Out 的意义是 能保证函数在退出前,传入的引用一定会被赋值,所以才能传入未初始化的的值,因为用out传入引用就相当一种初始化。在Unity中的案例就是射线检测用的就是Out
void DoSomething() { // 对 i 没有进行初始化,而是进行内存的分配 // 因为使用 out 的时候,out 会自动对其再次初始化一遍,会无视之前的初始化 int i; Change(out i); // i 的数值无论前面发生了什么,都不会进到函数里面,而是会在出来的时候再次被初始化 // 最终会导致里面的 i 的值为4 } void Change(out int a) { // 在这里再次对 参数a 进行初始化,无论之前数据如何 a = 4; }