Pesquisar

14 de dez de 2007

Novos recursos no C#3.0

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 };

Nenhum comentário: