C # - Passando Parâmetros por Saída

Uma instrução de retorno pode ser usada para retornar apenas um valor de uma função. No entanto, usandooutput parameters, você pode retornar dois valores de uma função. Os parâmetros de saída são semelhantes aos parâmetros de referência, exceto que eles transferem dados fora do método em vez de dentro dele.

O exemplo a seguir ilustra isso -

using System;

namespace CalculatorApplication {
   class NumberManipulator {
      public void getValue(out int x ) {
         int temp = 5;
         x = temp;
      }
      static void Main(string[] args) {
         NumberManipulator n = new NumberManipulator();
         
         /* local variable definition */
         int a = 100;
         
         Console.WriteLine("Before method call, value of a : {0}", a);
         
         /* calling a function to get the value */
         n.getValue(out a);

         Console.WriteLine("After method call, value of a : {0}", a);
         Console.ReadLine();
      }
   }
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Before method call, value of a : 100
After method call, value of a : 5

A variável fornecida para o parâmetro de saída não precisa ser atribuída a um valor. Os parâmetros de saída são particularmente úteis quando você precisa retornar valores de um método por meio dos parâmetros sem atribuir um valor inicial ao parâmetro. Vá até o exemplo a seguir, para entender isso -

using System;

namespace CalculatorApplication {
   class NumberManipulator {
      public void getValues(out int x, out int y ) {
          Console.WriteLine("Enter the first value: ");
          x = Convert.ToInt32(Console.ReadLine());
          
          Console.WriteLine("Enter the second value: ");
          y = Convert.ToInt32(Console.ReadLine());
      }
      static void Main(string[] args) {
         NumberManipulator n = new NumberManipulator();
         
         /* local variable definition */
         int a , b;
         
         /* calling a function to get the values */
         n.getValues(out a, out b);
         
         Console.WriteLine("After method call, value of a : {0}", a);
         Console.WriteLine("After method call, value of b : {0}", b);
         Console.ReadLine();
      }
   }
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Enter the first value:
7
Enter the second value:
8
After method call, value of a : 7
After method call, value of b : 8