ref、out
在C#中,ref
和out
都是用于方法参数的关键字,它们都允许方法修改传递给它的参数的值。不过,它们在使用上有一些区别:
-
ref:
ref
关键字用于传递参数的引用。- 调用方法时,必须在参数前加上
ref
关键字。 - 方法内部可以修改参数的值,并且这些修改会影响到原始变量。
- 在方法被调用之前,参数必须被初始化,因为
ref
参数实际上是引用传递,方法内部需要知道它指向的是哪个变量。
示例:
void Method(ref int number) { number = 10; // 修改引用的值 } int main() { int number = 5; Method(ref number); // 调用时需要使用ref Console.WriteLine(number); // 输出10,因为number的值被方法改变了 return 0; }
-
out:
out
关键字也用于传递参数的引用,但是它用于那些在方法调用之前不必初始化的参数。- 调用方法时,同样需要在参数前加上
out
关键字。 - 方法内部可以修改参数的值,并且这些修改会影响到原始变量。
out
参数在方法结束前必须被赋予一个值,否则会抛出编译错误。
示例:
void Method(out int number) { number = 10; // 必须在方法结束前赋值 } int main() { int number; Method(out number); // 调用时需要使用out,number在调用前不必初始化 Console.WriteLine(number); // 输出10 return 0; }
总结来说,ref
和out
的主要区别在于:
ref
参数必须在传递给方法之前已经被初始化。out
参数可以在传递给方法之前未被初始化,并且必须在方法内部被赋予一个值。
在C# 7.2及更高版本中,还引入了in
关键字,用于只读引用传递,参数的值不会被方法修改。