C# 中 Ref 和 Out 关键字的区别

17 Mar 2025 | 4 分钟阅读

C# 中的 refout 关键字用于通过引用将参数传递给方法,这使得方法可以修改传递给它的原始变量。

什么是 Ref 关键字?

在 C# 中,"ref" 是一个关键字。ref 关键字用于通过引用而不是通过值将参数传递给方法或函数。这意味着在方法内部对参数所做的更改将影响传递给该方法的原始变量。

语法

它具有以下语法:

  • public: "public" 这个词表示可以从类外部访问该方法。
  • static: 当一个方法被指定为 "static" 时,它表示它是类的一部分,而不是特定实例的
  • Return Type: "void" 这个词表示所使用的方法不返回任何内容。
  • parameter: 'ref int x' 指定了一个名为 x 的 int 类型参数。参数类型 int 前面加上了 ref 关键字,表示 x 是通过引用传递的。这意味着对方法内部的 'x' 所做的任何更改都会影响传递给它的变量。

示例

让我们以一个例子来说明 C# 中的 Ref 关键字

输出

The Previous value of integer 'q' is:1
The Current value of integer 'q' is:2

说明

在这个程序中,GetNextItem 方法将 "Next-" 与传入的数值连接起来,增加整数,并返回连接后的字符串。Main 方法演示了如何使用此方法并显示整数变量 "q" 在方法内部和外部因传递 ref 参数而发生的变化。

什么是 Out 关键字?

在 C# 中,"out" 是一个关键字。使用 out 关键字通过引用发送参数。在 C# 中,定义输出参数的方法使用 out 关键字。它提供了一种返回多个值的方法。当使用 out 关键字指定参数时,编译器会收到通知,即期望方法在返回之前为参数分配一个值。与 "ref" 参数(必须在传递给方法之前初始化)不同,参数不需要在使用前初始化,但仍需要在方法内为其设置一个值。

语法

它具有以下语法:

  • public: "public" 这个词表示可以从类外部访问该方法。
  • static: 当一个方法被指定为 "static" 时,它表示它是类的一部分,而不是特定实例的
  • Return Type: "void" 这个词表示所使用的方法不返回任何内容。
  • Parameter: 'out int x' 定义了一个名为 x 的 int 类型参数。int 参数前面加上了 out 关键字,表示 x 是一个输出参数。它表示在返回之前,方法应该为 x 分配一个值。

out 参数不像普通参数那样,它可以被传递给方法而不必先赋值。相反,方法负责在方法完成之前对其进行初始化。

示例

让我们以一个例子来说明 C# 中的 Out 关键字

输出

The Previous value of integer j:1
The Current value of integer j:2

说明

总之,GetNextItem 方法将 out 参数 'j' 的值修改为 2,Main 方法打印这个更新后的值,以演示 out 参数在 C# 中的用法。

Ref 和 Out 关键字的区别

Difference between Ref and Out keywords in C#

C# 中 RefOut 关键字之间有许多主要区别。以下是一些主要区别:

特性'ref' 关键字'out' 关键字
初始化在变量被初始化之前,不能将其传递给方法。不需要在使用前初始化变量。
方法要求变量在传递前必须初始化,并且方法可以读取和修改它。方法在返回前需要为参数分配一个值。
引用传递变量按引用传递。方法内外的更改都会影响原始变量。此外,变量按引用传递。必须在方法内赋值。
用途当方法需要修改原始变量时使用。当方法需要通过参数返回值,并且不需要在调用前初始化变量时使用。
典型用例修改传递给方法的参数,例如就地交换值或修改原始值。从方法返回多个值或成功/失败指示。
数据流使用 ref 关键字可能会导致数据双向流动。使用 out 关键字时,数据仅单向发送。