out 关键字
out
out关键字用于将方法的输出参数传递给调用者。- 与
ref不同,out关键字只能用于输出参数,输出参数是在方法内部分配的,并且必须在方法结束之前进行初始化。 - 使用
out关键字可以让方法返回多个值。
csharp
using System;
class Program {
static void Main() {
int number1;
int number2;
AddNumbers(5, 10, out number1, out number2); // 通过使用 out 关键字,可以在方法中更改传递给它的变量的值
Console.WriteLine("The sum is {0} and the product is {1}", number1 + number2, number1 * number2);
}
/// <summary>
/// 计算两个整数的和与乘积,接受两个 `int` 类型的参数,并使用 `out` 关键字将它们作为输出参数传递
/// </summary>
static void AddNumbers(int a, int b, out int sum, out int product) {
// 因为我们使用了`out`关键字,所以在 `AddNumbers` 方法返回之前,`sum` 和 `product` 必须在方法内部进行初始化
sum = a + b;
product = a * b;
}
}
// The sum is 15 and the product is 50- 我们使用
out关键字将number1和number2作为输出参数传递给AddNumbers。 - 方法在内部计算了
sum和product的值,并将它们分配给了number1和number2。 - 然后在
Main方法中使用这些变量计算和和乘积,并将它们输出到控制台。
注意
- 使用
out关键字时,必须在方法调用中为每个输出参数提供一个变量,否则编译器将引发错误。 - 并且,在方法内部必须在方法的所有路径中为输出参数赋值,否则编译器也将引发错误。
总结
out关键字可以让你在 C# 中返回多个值,通过将参数作为输出参数传递给方法来实现。- 与
ref关键字不同,out关键字不要求在调用方法之前初始化参数的值,因为方法将负责为其赋值。
ref 和 out 的区别
ref 关键字和 out 关键字都用于将参数传递给方法。虽然它们的作用有些类似,但它们之间有几个重要的区别:
- 使用方式。
- 使用
ref关键字时,参数必须在方法调用之前初始化,因为方法可以更改参数的值。 - 使用
out关键字时,参数不需要在方法调用之前初始化,因为方法将负责为其赋值。
- 使用
- 目的。
- 使用
ref关键字时,主要目的是允许方法更改参数的值,并将更改后的值传递回调用方。 - 使用
out关键字时,主要目的是返回多个值。
- 使用
- 错误处理。
- 使用
ref关键字时,方法可以选择不更改参数的值,而是返回错误代码或异常。 - 使用
out关键字时,方法必须在方法的所有路径中为输出参数赋值,否则编译器将引发错误。
- 使用
csharp
using System;
class Program
{
static void Main()
{
int a = 10;
int b = 20;
int sum;
// 使用 ref 关键字交换 a 和 b 的值
Console.WriteLine($"Before swap: a={a}, b={b}");
Swap(ref a, ref b); // 使用 `ref` 关键字将 `a` 和 `b` 的值传递给 `Swap` 方法,以便交换它们的值
Console.WriteLine($"After swap: a={a}, b={b}");
// 使用 out 关键字计算 a 和 b 的和
CalculateSumAndProduct(10, 20, out sum, out int product); // 使用了 `out` 关键字,`CalculateSumAndProduct` 方法可以为 `sum` 和 `product` 赋值,并将它们作为输出参数返回
Console.WriteLine($"Sum: {sum}, Product: {product}");
}
/// <summary>
/// 交换两个整数的值,使用 `ref` 关键字将 `x` 和 `y` 的值传递给 `Swap` 方法,以便交换它们的值
/// </summary>
static void Swap(ref int x, ref int y)
{
int temp = x; // 使用临时变量来交换 `x` 和 `y` 的值
x = y;
y = temp;
}
/// <summary>
/// 计算两个整数的和与乘积,并使用 `out` 关键字将它们作为输出参数传递
/// </summary>
static void CalculateSumAndProduct(int a, int b, out int sum, out int product)
{
sum = a + b;
product = a * b;
}
}
// lessCopy codeBefore swap: a=10, b=20
// After swap: a=20, b=10
// Sum: 30, Product: 200总之,ref 关键字和 out 关键字都可以将参数传递给方法,但它们的使用方式和目的有所不同。 ref 关键字用于允许方法更改参数的值,并将更改后的值传递回调用方。 out 关键字用于返回多个值。