out (Referencia de C#)

Puede utilizar la palabra clave contextual out en dos contextos (cada uno es un vínculo a información detallada), como un modificador de parámetro o en las declaraciones de parámetro de tipo genérico en interfaces y delegados. En este tema se describe el modificador de parámetro, pero puede ver este otro tema para obtener información sobre las declaraciones de parámetros de tipo genérico.

La palabra clave out hace que los argumentos se pasen por referencia. En esto es como la palabra clave ref, salvo que ref requiere que se inicialice la variable antes de pasarla. Para usar un parámetro out, tanto la definición de método como 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 pasarse, es necesario que el método llamado asigne un valor antes de que el método devuelva un resultado.

Aunque las palabras clave ref y out causan un comportamiento diferente en tiempo de ejecución, no se consideran parte de la signatura del método en tiempo de compilación. Por lo tanto, los métodos no pueden sobrecargarse si la única diferencia es 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) { }
}

La sobrecarga es posible, sin embargo, si un método toma un argumento ref o out y el otro no utiliza ninguno, así:

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

Las propiedades no son variables y, por tanto, no pueden pasarse 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#).

Las palabras clave ref y out no pueden usarse para los siguientes tipos de métodos:

  • Métodos asincrónicos, que se definen mediante el uso del modificador async.

  • Métodos de iterador, que incluyen una instrucción yield return o yield break.

Ejemplo

Declarar un método out resulta útil cuando se desea que devuelva varios valores. En el ejemplo siguiente, se utiliza out para devolver tres variables con una única llamada al método. Tenga en cuenta 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;
        }
    }

Vea también

Otros recursos

Referencia de C#