Neste artigo vou mostrar como usar alguns dos novos recursos da linguagem C# na prática : Usando propriedades implementadas automaticamente. |
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
NET - Design Patterns - Uma abordagem Prática - Macoratti.net