Você pode usar a out
palavra-chave contextual em dois contextos (cada um é um link para 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 out
palavra-chave faz com que os argumentos sejam passados por referência. É como a ref
palavra - chave, exceto que ref
requer que a variável seja inicializada antes de ser passada. Para usar um out
parâmetro, a definição do método e o método de chamada devem usar explicitamente a out
palavra - chave. Por exemplo: C #
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 out
argumentos não precisem ser inicializadas antes de serem passadas, o método chamado é necessário para atribuir um valor antes que o método retorne.
Embora as palavras ref
- out
chave e causem um 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 podem ser sobrecarregados se a única diferença é que um método usa um ref
argumento e o outro usa um out
argumento. O código a seguir, por exemplo, não será compilado: C #
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) { }
}
A sobrecarga pode ser feita, no entanto, se um método usa um argumento ref
ou out
e o outro não usa, como este: C #
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 out
parâmetros.
Para obter informações sobre como passar matrizes, consulte Passando matrizes usando ref
e out
(Guia de programação em C #).
Você não pode usar as palavras ref
- out
chave e para os seguintes tipos de métodos:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Exemplo
Declarar um out
método é ú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 nulo. Isso permite que os métodos retornem valores opcionalmente. C #
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;
}
}
out
não pode ser lida antes de ser atribuída.ref
não tem essa restrição. Então tem isso.