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