Compartilhar via


out (Referência de C#)

Você pode usar a palavra-chave contextual out em dois contextos (cada um deles é um link para obtenção de informações detalhadas), como um modificador de parâmetro ou em declarações de parâmetro de tipo genérico em interfaces e delegados. Este tópico discute o modificador de parâmetro, mas você pode ver este outro tópico para obter informações sobre as declarações de parâmetro de tipo genérico.

A palavra-chave out faz com que os argumentos sejam passados por referência. Isso é como a palavra-chave ref, exceto que ref requer que a variável seja inicializada antes de ser passada. Para usar um parâmetro out, a definição do método e o método de chamada devem usar explicitamente a palavra-chave out. Por exemplo:

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

Embora as variáveis passadas como argumentos out não precisem ser inicializadas antes de serem passadas, o método chamado é necessário para atribuir um valor antes de o método retornar.

Embora as palavras-chave ref e out causem comportamento de tempo de execução diferente, elas não são consideradas parte da assinatura do método no momento da compilação. Portanto, os métodos não poderão ser sobrecarregados se a única diferença for que um método terá um argumento ref e o outro utilizará um argumento out. Por exemplo, o código a seguir, não será compilado:

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) { }
}

No entanto, poderá haver sobrecarga se um método tiver um argumento ref ou out e o outro não usar nenhum, como por exemplo:

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

Propriedades não são variáveis e portanto não podem ser passadas como parâmetros out.

Para obter informações sobre como passar matrizes, consulte Passando matrizes com o uso de ref e out (Guia de Programação em C#).

Não é possível usar as palavras-chave ref e out para os seguintes tipos de métodos:

  • Métodos assíncronos, que você define usando o modificador async.

  • Métodos de iterador, que incluem uma instrução yield return ou yield break.

Exemplo

Declarar um método out é útil quando você deseja que um método retorne vários valores. O exemplo a seguir usa out para retornar três variáveis com uma única chamada de método. Observe que o terceiro argumento é atribuído a null. Isso permite que os métodos retornem 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;
        }
    }

Consulte também

Outros recursos

Referência de C#