Parâmetros opcionais e nomeados do C#
public class Produto { public String Descricao { get; set; } public String Nome { get; set; } public Decimal Preco { get; set; } public int Quantidade { get; set; } public String Fornecedor { get; set; } }
Para obrigar o preenchimento de todos os campos do produto, podemos criar um construtor que recebe essas informações:
public Produto (String descricao, String nome, Decimal preco, int quantidade, String fornecedor) { this.Descricao = descricao; this.Nome = nome; this.Preco = preco; this.Quantidade = quantidade; this.Fornecedor = fornecedor; }
Mas algumas vezes não sabemos todas as informações necessárias para o cadastro do produto, nesses casos, queremos utilizar valores padrões para os campos:
new Produto("sem descrição", "sem nome", 0.0m, 0, "sem fornecedor");
O problema dessa abordagem é que teríamos que utilizar consistentemente esses valores padrão em todos os pontos do sistema. Nessa situação, podemos utilizar os parâmetros opcionais do C#.
Para definirmos um valor opcional no construtor, precisamos declarar o parâmetro e atribuir qual será o valor padrão:
public Produto (String descricao = "sem descrição", String nome = "sem nome", Decimal preco = 0.0m, int quantidade = 0, String fornecedor = "sem fornecedor") { this.Descricao = descricao; this.Nome = nome; this.Preco = preco; this.Quantidade = quantidade; this.Fornecedor = fornecedor; }
Com isso, ao executarmos o código:
Produto p = new Produto();
Teremos um na variável p um produto preenchido com todos os valores padrão que foram definidos na declaração do construtor. Além disso, podemos definir, por exemplo, o nome e a descrição simplesmente enviando essas informações como parâmetros:
// sobrescreve apenas o nome e a descrição Produto p = new Produto ("Apostila do curso de C# da Caelum", "Apostila de C#");
Mas e se tivermos apenas o nome do produto? Como o primeiro argumento do construtor é a descrição, temos de fornecer a descrição para só depois passar o nome. Nessa situação, gostaríamos de chamar o construtor falando que o parâmetro passado representa o nome do produto, para isso, utilizamos os parâmetros nomeados do C#.
Quando queremos utilizar um parâmetro nomeado, precisamos falar o nome do parâmetro seguido de ':' e depois o valor que será colocado no parâmetro, no exemplo, poderíamos chamar o construtor do produto da seguinte forma:
Produto p = new Produto(nome: "Apostila de C#");
Com esse código, construímos um produto definindo apenas o nome, as outras informações ainda estão com os valores padrão definidos no código do construtor.
Para mais informações sobre os argumentos nomeados e opcionais, consulte o guia de programação da msdn. Conheça também os cursos de .NET da Caelum!