Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Palavra reservada Out C#

static int Test(out int x, int y=4)
{x=6;
return x*y;
}
static void Main(string [] args){
int a;
int z = Test(out a);
Console.WriteLine(a+z);
}

Gostaria de saber como funciona a palavra reservada Out no c# e qual é o resultado do código acima e por quê? Também queria saber a respeito da palavra ref.

3 respostas
solução!

André, boa tarde!

Variáveis passadas como argumentos out não precisam ser inicializadas antes de serem passadas em uma chamada de método.

ref requer que a variável seja inicializada antes de ser passada. Também é como a palavra-chave in, exceto que in não permite que o método chamado modifique o valor do argumento

static int Test(out int x, int y=4) { //Iniciando uma e outra não
x=6; // Inicializa x
return x*y; //Retorna o cálculo
}

Espero ter ajudado e bons estudos!

Você poderia dar um exemplo do uso de out, ref e in? E no código que eu coloquei, ainda não entendi o que o código escreverá, a primeira parte que vc mostrou eu entendi, o problema está na segunda.

André,

Você pode usar a palavra-chave out em dois contextos:

  • Como um modificador de parâmetro, que permite passar um argumento para um método por referência, não por valor.
  • Em declarações de parâmetro de tipo genérico para interfaces e representantes, que especificam que um parâmetro de tipo é covariante.

A palavra-chave in é usada em quatro contextos:

  • parâmetros de tipo genérico em interfaces e delegados genéricos.
  • Como um modificador de parâmetro, que permite passar um argumento para um método por referência, não por valor.
  • Instruções foreach.
  • Cláusulas from em expressões de consulta LINQ.

A palavra-chave ref indica um valor que é passado por referência. Ela é usada em quatro contextos diferentes:

  • Em uma assinatura de método e em uma chamada de método, para passar um argumento a um método por referência. Para obter mais informações, veja Passar um argumento por referência.
  • Em uma assinatura de método para retornar um valor para o chamador por referência. Para obter mais informações, consulte Reference return values (Valores retornados de referência).
  • Em um corpo de membro, para indicar que um valor retornado por referência é armazenado localmente como uma referência que o chamador pretende modificar ou, em geral, uma variável local acessa outro valor por referência. Para obter mais informações, veja Locais de referência.
  • Em uma declaração struct para declarar um ref struct ou um ref readonly struct. Para obter mais informações, veja tipos ref struct.
  • Cláusulas de junção em expressões de consulta LINQ.

Sobre a segunda parte do código eu precisaria ver como é o código da função Test(), para te responder com certeza, ainda assim acredito, que ela esteja vendo se existe algo na variável a, atribuindo esse valor a z logo após é mostrado o resultado da soma entre a e z.

Espero ter ajudado e bons estudos!

Fontes: