C# - Parâmetros Opcionais
Neste artigo eu vou falar de um recurso introduzido na versão 4.0 do C#, os parâmetros opcionais. |
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() |
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 :
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 )
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.