out (Referencia de C#)

Actualización: noviembre 2007

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 pasadas como argumentos out no tienen que inicializarse antes de pasarlas, se requiere que el método de llamada asigne un valor antes de que el método devuelva un valor.

Las palabras clave ref y out se tratan de manera diferente en tiempo de ejecución, pero se tratan del mismo modo en tiempo de compilación. Por consiguiente no se pueden sobrecargar los métodos si un método toma un argumento ref y el otro toma un argumento out. Por ejemplo, estos dos métodos son idénticos en lo referente a la compilación, por lo que este código 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#).

Ejemplo

Declarar un método como out es útil cuando se desea que devuelva varios valores. Un método que utiliza un parámetro out puede obtener acceso a variables como tipo de valor devuelto (vea return), pero también puede devolver uno o más objetos a un método de llamada como parámetros out. Este ejemplo utiliza 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, vea las secciones siguientes de Especificación del lenguaje C#.

  • 5.1.6 Parámetros de salida

  • 10.6.1.3 Parámetros de salida

Vea también

Conceptos

Guía de programación de C#

Referencia

Palabras clave de C#

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

Otros recursos

Referencia de C#