C#  - Usando os novos recursos da linguagem na prática - II


 Neste artigo vou mostrar como usar alguns dos novos recursos da linguagem C# na prática :  Usando propriedades implementadas automaticamente.

Na primeira parte do artigo usamos o recurso do operador condicional nulo. Vamos continuar agora usando as propriedades implementadas automaticamente em nosso projeto ASP .NET MVC 5.

Esse recurso não é novo mas muita gente insiste em continuar usando a sintaxe antiga.

Através das propriedades auto-implementadas podemos fazer a declaração das propriedades de uma classe de uma maneira mais concisa quando nenhuma lógica adicional é necessária nos assessores (get e set) das propriedades.

Vamos comparar como era antes e como ficou a declaração das propriedades usando o recurso das propriedades auto-implementadas:

private int _idade;

public int Idade
{
     get { return _idade; }
     set { _idade = value; }
}
   public int Idade
   {
         get; set;
   }
 ANTES DA VERSÃO 3.0 COM PROPRIEDADES AUTO-IMPLEMENTADAS

Obs: Nos métodos de acesso às propriedades temos os famosos get/set, onde o acessor get é responsável por retornar um valor de um campo privado da classe e o acessor set é responsável por atribuir um novo valor ao campo.

Esse recurso foi usado na definição da classe Produto:

 public class Produto
    {
          public string Nome { get; set; }
        public decimal? Preco { get; set; }
        public Produto Acessorios { get; set; }
        public static Produto[] GetProdutos()
        {
            Produto Tablet = new Produto
            {
                Nome = "Tablet",
                Preco = 275.99M
            };
            Produto FonesOuvido = new Produto
            {
                Nome = "Fones de Ouvido",
                Preco = 18.55M
            };
            Tablet.Acessorios = FonesOuvido;
            return new Produto[] { Tablet, FonesOuvido, null };
        }
    }

Podemos melhorar o nosso código usando um recurso mais recente da linguagem C# : Os inicializadores das propriedades implementadas automaticamente.

Usando os inicializadores das propriedades implementadas automaticamente

Ao utilizar o recurso dos inicializadores das propriedades autoimplementadas podemos definir um valor inicial sem ter que usar um construtor.

No exemplo abaixo, à esquerda, temos a classe Pizza que possui a propriedade Preco sendo inicializada no seu construtor:

    public class Pizza
    {
        public decimal Preco { get; set; }
        public Pizza()
        {
            Preco = 34.25M;
        }
    }
    public class Pizza
    {
        public decimal Preco { get; set; } = 34.25M
    }

Usando a inicialização na propriedades autoimplementada podemos combinar a declaração com a inicialização como mostrado à direita.

Veja como podemos usar esse recurso em nosso projeto na definição da classe Produto:

public class Produto
    {
        public string Nome { get; set; }
        public string Categoria { get; set; } = "Informática";
        public decimal? Preco { get; set; }
        public Produto Acessorios { get; set; }
        public static Produto[] GetProdutos()
        {
            Produto Tablet = new Produto
         {
                Nome = "Tablet",
                Categoria = "Tablets",
                Preco = 275.99M
         };
            Produto FonesOuvido = new Produto
            {
                Nome = "Fones de Ouvido",
                Preco = 18.55M
            };
            Tablet.Acessorios = FonesOuvido;
            return new Produto[] { Tablet, FonesOuvido, null };
        }
    }

Definimos uma nova propriedade chamada Categoria e inicializamos o seu valor com "Informática".

Observe que essa definição inicial não impede que eu possa alterar o valor inicial quando eu crio outro objeto. No exemplo ao criar o objeto Tablet a propriedade Categoria foi definida com outro valor.

Criando propriedades autoimplementadas somente leitura

E se precisarmos definir uma propriedade criada automaticamente como somente leitura ?

Podemos criar uma propriedade somente leitura usando um inicializador e omitir a palavra-chave set de uma proprieade auto-implementada que tem  um inicializador.

No nosso exemplo veja como fica a aplicação deste recurso:

    public class Produto
    {
        public string Nome { get; set; }
        public string Categoria { get; set; } = "Informática";
        public decimal? Preco { get; set; }
        public Produto Acessorios { get; set; }
        public bool Estoque { get; } = true;
        public static Produto[] GetProdutos()
        {
            Produto Tablet = new Produto
            {
                Nome = "Tablet",
                Categoria = "Tablets",
                Preco = 275.99M
            };
            Produto FonesOuvido = new Produto
            {
                Nome = "Fones de Ouvido",
                Preco = 18.55M
            };
            Tablet.Acessorios = FonesOuvido;
            return new Produto[] { Tablet, FonesOuvido, null };
        }
    }

Definimos a propriedade Estoque do tipo bool e inicializamos o seu valor como sendo igual a true.

Note que na definição da propriedade omitimos o modificador set, o que faz com que essa propriedade não possa ser alterada.

No entanto podemos atribuir o valor no construtor da classe como podemos ver a seguir:

 public class Produto
    {
        public string Nome { get; set; }
        public string Categoria { get; set; } = "Informática";
        public decimal? Preco { get; set; }
        public Produto Acessorios { get; set; }
        public bool Estoque { get; } = true;
        public Produto(bool estoque = true)
        {
            Estoque = estoque;
        }
        public static Produto[] GetProdutos()
        {
            Produto Tablet = new Produto
            {
                Nome = "Tablet",
                Categoria = "Tablets",
                Preco = 275.99M
            };
            Produto FonesOuvido = new Produto(false)
            {
                Nome = "Fones de Ouvido",
                Preco = 18.55M
            };
            Tablet.Acessorios = FonesOuvido;
            return new Produto[] { Tablet, FonesOuvido, null };
        }
    }

No código acima definimos o construtor da classe Produto e o construtor permite que o valor da propriedade Estoque somente leitura seja especificada como um argumento com valor padrão igual a true se um valor não for especificado.

O valor da propriedade não pode ser alterado uma vez definida pelo construtor.

Na próxima parte do artigo vamos continuar usando alguns dos novos recursos da linguagem C# em nossa aplicação.

Pegue o projeto aqui : Mvc_CSharp2.zip (sem as referências)

Mas a hora vem, e agora é, em que os verdadeiros adoradores adorarão o Pai em espírito e em verdade; porque o Pai procura a tais que assim o adorem.
Deus é Espírito, e importa que os que o adoram o adorem em espírito e em verdade.

João 4:23,24

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti