Compartir a través de


Modificador del parámetro out (Referencia de C#)

La palabra clave out produce argumentos que se van a pasar por referencia. Ocurre igual que con la palabra clave ref, excepto en que ref requiere que se inicialice la variable antes de pasarla. Utilizar un parámetro out, la definición de método y el método de llamada deben utilizar explícitamente la palabra clave out. Por ejemplo:

class OutExample
{
    static void Method(out int i)
    {
        i = 44;
    }
    static void Main()
    {
        int value;
        Method(out value);
        // value is now 44
    }
}

Aunque las variables que se pasan como argumentos out no tienen que inicializarse antes de pasarlas, se requiere que el método invocado asigne un valor antes de que se devuelva.

Aunque las palabras clave out y ref generan un comportamiento diferente en tiempo de ejecución, no se consideran parte de la firma del método en tiempo de compilación. Por consiguiente, no se pueden sobrecargar los métodos si la única diferencia consiste en que un método toma un argumento ref y el otro toma un argumento out. Por ejemplo, el código siguiente no se compilará:

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded  
    // methods that differ only on ref and out". 
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

Sin embargo, se puede realizar la sobrecarga si un método toma un argumento ref u out y el otro no utiliza ninguno de los dos, de la manera siguiente:

class OutOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(out int i) { i = 5; }
}

Las propiedades no son variables y, por consiguiente, no se pueden pasar como parámetros out.

Para obtener información sobre cómo pasar matrices, vea Pasar matrices mediante Ref y Out (Guía de programación de C#).

No puede usar palabras clave de ref y de out para los siguientes tipos de métodos:

  • Métodos Async, que se define utilizando el modificador de async .

  • Métodos de iterador, que incluyen un fragmento de retorno de producción o de yield break .

Ejemplo

Declarar un método como out es útil cuando se desea que devuelva varios valores. En el siguiente ejemplo, se usa out para devolver tres variables con una única llamada al método. Observe que el tercer argumento se asigna a null. Esto permite que los métodos devuelvan valores opcionalmente.

    class OutReturnExample
    {
        static void Method(out int i, out string s1, out string s2)
        {
            i = 44;
            s1 = "I've been returned";
            s2 = null;
        }
        static void Main()
        {
            int value;
            string str1, str2;
            Method(out value, out str1, out str2);
            // value is now 44 
            // str1 is now "I've been returned" 
            // str2 is (still) null;
        }
    }

Especificación del lenguaje C#

Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Palabras clave de C#

Parámetros de métodos (Referencia de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#