Parâmetros em C#

watch_later 5 de abr de 2013

Métodos podem conter parâmetros que são utilizados para passar e retornar valores de um método , quando declaramos um método que contém parâmetros , devemos especificar o tipo do dado(s) que o parâmetro deve conter , eu aconselho não passar tipos object por parâmetro , pois a aplicação vai precisar de um alto custo de CPU para fazer esses tipos de conversão.

Passando Parâmetros por valor

É possível passar informações a um método por referência e por valor , a diferença é que os valores passados por referência modificam os valores das variáveis passadas para o método , já um parâmetro passado por valor a um método não modifica o valor da variável passada ao método , a seguir um exemplo de como passar parâmetros por valor:

public class Calculadora
{
   public decimal Soma(decima x , decimal y)
   {
      return x+y;
   }
}

Repare que simulei uma Calculadora e método devolve para nós a soma dos dois números , abaixo um exemplo de uso da classe Calculadora:
Calculadora objCalculadora = new Calculadora();
decimal x = 10;
decimal y = 20;
Console.Writeline(string.Format(“Valor de x : {0}”,x);
Console.Writeline(string.Format(“Valor de y : {0}”,y);
Console.Writeline(string.Format(“Resultado : {0}”, objCalculadora.Soma(x,y));

Como a passagem dos parâmetros foi feita por valor , as variáveis x e y não sofreram alterações.Resultado do exemplo a seguir:
Valor de x : 10
Valor de y : 20
Resultado : 30

Passando Parâmetros por referência

Como um já mencionei nesse post, os valores passado por referência modificam os valores das variáveis passadas para o método , isso se torna útil em situações em que os valores das variáveis passadas para o método devem conter valores atualizados manipulados pelo método.
Exemplo: uma variável que contém um número de itens de um carrinho de compras, o total de itens pode ser passado a um determinado método e atualizado no momento em que novos itens forem adicionados ao carrinho.
A seguir temos um exemplo usando uma classe chamada Cart , repare que o parâmetro numItensTotal foi declarado com a palavra-chave ref , assim , informamos ao compilador que os valores serão passados ao método por referência , como o parâmetro numItensTotal
public class Cart
{
   public int AddItemsCart(ref int numItensTotal)
   {
      return numItensTotal += 1;
   }
}

Em Seguida criamos uma instância da classe Cart e passamos a variável xItens por referência , novamente , é necessário utilizar palavra chave ref , para usar um parâmetro ref , ambos , a definição do método e a chamada do método deve utilizar a palavra ref explicitamente.
Cart objCart = new Cart();
Int xItens = 10;
Console.Writeline(string.Format(“Método Add Item : {0}” , objCart.AddItemsCart(ref xItens));

Esse exemplo tem o seguinte retorno:

Método Add Item : 11;

Passando Parâmetros out

Semelhante ao parâmetro ref (por referência) , os parâmetros out podem ser usados para passar um resultado de volta para um método sem a necessidade de criar um método que tenha um retorno específico , a variável passada ao método não precisa ser inicializada como acontece em ref.
A seguir reescrevi o método AddItensCart da classe Cart , agora , temos um parâmetro (numItensTotal) passado por valor e outro parâmetro de (saída) do tipo out;
public class Cart
{
   public void AddItemsCart(int numItensTotal, out saida)
   {
      numItensTotal += 1;
      saída = numItensTotal;
   }
}

Repare que o método passou a ser void , porém nós poderíamos manter na mesma classe os dois métodos pois tem assinaturas diferentes.
Para chamar esse método devemos fazer da seguinte maneira:

Cart objCart = new Cart();
int xOut;
int valor = 10;
objCart.AddItemsCart(valor, xOut);
Console.Writeline(string.Format(“Variável xOut {0}”,xOut));

Repare que o método é void , ou seja , não retorna nenhum valor , somente o int xOut terá o valor retornado pelo método.