Vou falar sobre alguns novos recursos que vieram na nova versão do C#.
Começando pelas Propriedades Automáticas.
Antigamente quando a gente criava as propriedades das nossas classes, faziamos um código como esse:
7 public class Carro
8 {
9 private string _modelo;
10 private string _marca;
11 private int _ano;
12 private string _cor;
13
14 public string Modelo
15 {
16 get { return _modelo; }
17 set { _modelo =
value; }
18 }
19 20 public string Marca
21 {
22 get { return _marca; }
23 set { _marca =
value; }
24 }
25 26 public int Ano
27 {
28 get { return _ano; }
29 set { _ano =
value; }
30 }
31 32 public string Cor
33 {
34 get { return _cor; }
35 set { _cor =
value; }
36 }
37 }
Como você pode notar, as propriedades não tem nenhum tratamento lógico, servindo como se fosse um acesso direto aos campos. Então porque não expor os campos diretamente? Basicamente porque no futuro você pode querer implementar algum tratamento, assim se você tiver usado propriedades, as classes que usam suas propriedades não precisarão ser recompiladas.
Sendo muito comum o uso de propriedades como as que vimos acima, no C#3.0 foi implementado as Propriedades Automáticas, que substituem esse código "padrão". O código anterior ficaria assim:
7 public class Carro
8 {
9 public string Modelo { get; set; }
10 public string Marca { get; set; }
11 public int Ano { get; set; }
12 public string Cor { get; set; }
13 }
Quando o compilador encontrar um get/set vazio como estes, ele automáticamente criará os campos privados para a classe e implementará as propriedades públicas get/set.
Diferentemente de criar campos públicos, poderemos no futuro criar as implementações lógicas, sem ter que mudar nenhum componente externo que referencia nossa classe.
Inicializadores de Objetos
Usamos muitas propriedades quando estamos programando e é muito comum códigos como esse:
13 Carro car = new Carro();
14 car.Modelo =
"Punto";
15 car.Marca = "Fiat";
16 car.Ano = 2007;
17 car.Cor = "Azul";
Agora podemos escrever isso de outra forma, mais simples e concisa, usando os "object Initializers". Seu código pode ser escrito assim:
Carro car = new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul" };
E o compilador irá se encarregar de instanciar a classe e setar as propriedades.
É interessante que podemos inicializar objetos aninhados, como mostrado:
Carro car = new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul", Fabric = new Fabricante { Nome = "Industria Metal", CNPJ = "12312" } };
Inicializadores de Coleção
Os inicializadores de objeto também facilitam a maneira como adicionamos itens a uma coleção. Se quisermos adicionar objetos Carro a uma List devemos escrever o seguinte código:
14 List<Carro> Carros = new List<Carro>();
15 16 Carros.Add(new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul" });
17 Carros.Add(
new Carro { Modelo =
"Punto", Marca =
"Fiat", Ano = 2007, Cor =
"Vermelho" });
18 Carros.Add(new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Preto" });
Economizando muitas linhas de código. E podemos diminuir ainda mais, usando Inicializadores de coleção, não precisamos escrever vários métodos Add:
14 List<Carro> Carros = new List<Carro>{
15 new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul" },
16 new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Vermelho" },
17 new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Preto" }
18 };