C# - Parâmetros Opcionais


 Neste artigo eu vou falar de um recurso introduzido na versão 4.0 do C#, os parâmetros opcionais.

 

Para começar vamos definir o que é um parâmetro e o que é um argumento.

Os termos parâmetros e argumentos são frequentemente usados de forma intercambiáveis embora eles tenham significados inteiramente diferentes.

No VB .NET os parâmetros podem ser declarados como opcionais usando a palavra chave Optional, como mostrado no seguinte código:

Sub Calcular(Optional ByVal Switch As Boolean = False)

Dessa forma a plataforma .NET já possuía esse recurso desde a versão 1.0 e ele estava implementado no VB .NET. Assim, a Intermediate Language (IL) sempre gerou parâmetros opcionais para o VB .NET.

Na linguagem C#, antes da versão 4.0, geralmente se usava a sobrecarga ou overload para definir um método com parâmetro opcional.

Vejamos um exemplo básico onde temos uma classe Email e dois métodos estáticos Enviar() sobrecarregados conforme abaixo:

public Class Email
{
     public static void Enviar(string endereco)
     {
     }

     public static void Enviar()
     {
          this.Enviar("endereco padrao");
     }

}

Dessa forma chamar Email.Enviar() sem parâmetros é o mesmo que chamar Email.Enviar("endereco padrao")

Dependendo do cenário isso podia dar muito trabalho ao desenvolvedor se houvesse uma grande quantidade de sobrecargas e para o usuário não ficava muito claro qual seria o método padrão.

A partir do C# 4.0 podemos usar parâmetros opcionais simplificando o nosso código que ficaria assim:

public Class Email
{
     public static void Enviar(string endereco = "endereco padrao")
     {
     }
}

Agora para chamar o método o usuário poderia fazer assim:

1- Email.Enviar("macoratti@yahoo.com");   - Usa um endereço qualquer passando-o como argumento.

2- Email.Enviar();  - Usa o endereço padrão.  (omitimos o argumento) 

Dessa forma os parâmetros opcionais permitem omitir argumentos na invocação dos métodos.

Podemos usar tantos parâmetros opcionais quanto forem necessários. Assim podemos ter:

static void Soma(int x, int y = 20, int z = 30, int w=50)
{
            Console.WriteLine("{0},{1},{2},{3}", x, y, z,w);
}

E podemos chamar o método Soma() passando um, dois, três ou quatro argumentos :

Soma(100);
Soma(100, 200);
Soma(100, 200, 300);
Soma(100, 200, 300, 400);

Ao usar os parâmetros opcionais com o C# você tem que seguir algumas regras :

  1. Os parâmetros opcionais devem ser definidos após os parâmetros normais, ou seja, eles são sempre os últimos parâmetros do método. (Se você tentar quebrar essa regra vai obter a mensagem de erro:  Optional parameters must appear after all required parameters )
     

  2. Os valores padrão dos parâmetros opcionais só podem ser constantes, expressão de formulário new ValType() e expressão de formulário default(ValType)

Concluindo, podemos dizer que todo o parâmetro opcional deve possuir um valor padrão e que esse valor deve ser uma constante e que eles precisam estar definidos sempre como últimos parâmetros do método.

Na continuação desse artigo eu vou falar sobre os argumentos nomeados.


Referências:


José Carlos Macoratti