Skip to content
On this page

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 关键字将 number1number2 作为输出参数传递给 AddNumbers
  • 方法在内部计算了 sumproduct 的值,并将它们分配给了 number1number2
  • 然后在 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 关键字用于返回多个值。