📜  C#中带有示例的输出参数

📅  最后修改于: 2021-05-29 19:12:59             🧑  作者: Mango

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