C # - Pasar parámetros por salida

Una declaración de retorno se puede utilizar para devolver solo un valor de una función. Sin embargo, usandooutput parameters, puede devolver dos valores de una función. Los parámetros de salida son similares a los parámetros de referencia, excepto que transfieren datos fuera del método en lugar de hacerlo.

El siguiente ejemplo ilustra esto:

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();
      }
   }
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

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

No es necesario asignar un valor a la variable proporcionada para el parámetro de salida. Los parámetros de salida son particularmente útiles cuando necesita devolver valores de un método a través de los parámetros sin asignar un valor inicial al parámetro. Siga el siguiente ejemplo para comprender esto:

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();
      }
   }
}

Cuando se compila y ejecuta el código anterior, produce el siguiente 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