out是C#中的关键字,用于将参数作为引用类型传递给方法。通常在方法返回多个值时使用。
重要事项:
- 它类似于
ref
关键字。但是ref和out关键字之间的主要区别在于ref需要在将变量传递给方法之前必须对其进行初始化。但是out参数不需要在将变量传递给方法之前对其进行初始化。但是在将值返回给调用方法之前,必须在被调用方法中初始化变量。 - 它也类似于
in
关键字,但是in关键字不允许调用的方法更改参数值,而ref允许。 - 为了将out关键字用作参数,方法定义和调用方法都必须显式使用out关键字。
- out参数不允许在异步方法中使用。
- out参数不允许在迭代器方法中使用。
- 一个方法中可以有多个out参数。
- 在方法调用时,可以内联声明out参数。但是可以在调用的同一代码块中访问内联输出参数。
- 方法重载也可以使用out参数来完成。
- 属性不能作为输出参数传递,因为它们不是变量。
- 在C#6.0之前的版本中,用户首先声明变量,然后只能将其作为out参数传递。但是从C#7.0开始,除了单独的变量声明外,用户还可以在方法调用的参数列表中声明out变量。
退出参数声明:
// No need to initialize
// the variable here
data_type variable_name;
Method_Name(out variable_name);
// you can also convert both above two
// lines of codes as follows from
// C# 7.0 onwards
Method_Name(out data_type variable_name);
在此,必须在被调用的方法中初始化variable_name的值,然后才能返回值。
例子:
// C# program to illustrate the
// concept of out parameter
using System;
class GFG {
// Main method
static public void Main()
{
// Declaring variable
// without assigning value
int i;
// Pass variable i to the method
// using out keyword
Addition(out i);
// Display the value i
Console.WriteLine("The addition of the value is: {0}", i);
}
// Method in which out parameter is passed
// and this method returns the value of
// the passed parameter
public static void Addition(out int i)
{
i = 30;
i += i;
}
}
输出:
The addition of the value is: 60
多个输出参数:在C#中,允许用户将多个输出参数传递给方法,并且该方法返回多个值。
示例:在下面的代码中,我们声明了两个值变量而没有初始化,即int i, j;
。 Addition(out i, out j);
这样的out关键字将这些参数传递给Addition方法。 。这些变量的值在它们传递的方法中分配。
// C# program to illustrate the
// concept of multiple out parameter
using System;
class GFG {
// Main method
static public void Main()
{
// Declaring variables
// without assigning values
int i, j;
// Pass multiple variable to
// the method using out keyword
Addition(out i, out j);
// Display the value i and j
Console.WriteLine("The addition of the value is: {0}", i);
Console.WriteLine("The addition of the value is: {0}", j);
}
// Method in which out parameters
// are passed and this method returns
// the values of the passed parameters
public static void Addition(out int p, out int q)
{
p = 30;
q = 40;
p += p;
q += q;
}
}
输出:
The addition of the value is: 60
The addition of the value is: 80
C#7.0中Out参数的增强:在C#7.0中,out参数中添加了一些新功能,这些功能包括:
- 在C#7.0中,out参数可以不带声明和初始化的方式传递,这被称为Out参数或隐式类型Out Parameter的在线声明。它的范围仅限于方法主体,即局部范围。
- 方法参数列表中允许out参数使用var类型。
- 在定义和调用中,out参数的名称不一定是相同的。
- 也可以在“尝试模式”中使用。
示例:下面的程序演示了Out参数的内联声明。这里的代码行即Area(out int length, out int width, out int Rarea);
包含Out参数的内联声明,因为这些变量是在方法调用内部直接声明的。变量的值在它们传递的方法中初始化。
注意:您需要C#7.0版本才能运行此示例。
例子:
// C# program to illustrate the
// concept of out parameter
using System;
class GFG
{
// Main method
static public void Main()
{
// In-line declaraing varaibles
// without assigning values
// Passing multiple variable to
// the method using out keyword
Area(out int length, out int width, out int Rarea);
// Display the value length, width, and Rarea
System.Console.WriteLine("Length of the rectangle is: "+ length);
System.Console.WriteLine("Width of the rectangle is: "+ width);
System.Console.WriteLine("Area of the rectangle is: "+ Rarea);
Console.ReadLine();
}
// Method in which out parameters are passed
// and this method returns the values of
// the passed parameters
public static void Area(out int p, out int q, out int Rarea)
{
p = 30;
q = 40;
Rarea = p * q;
}
}
输出:
Length of the rectangle is : 30
Width of the rectangle is : 40
Area of the rectangle is : 1200