Inicialização de propriedades somente leitura a partir de um construtor - C# 6.0
O objetivo deste artigo é demonstrar a inicialização de propriedades somente leitura a partir de um construtor, uma das novas funcionalidades que integram o C# 6.0.
** Este post foi elaborado com base em um material publicado através do grupo de usuários .NET Coders, uma das principais comunidades de desenvolvimento no mundo.
*
Introdução
O recurso conhecido como “Auto-Property Initializers” é mais uma das novidades trazidas pelo C# 6.0. Em termos práticos, este mecanismo permite a atribuição de valores a propriedades a partir da própria declaração destes elementos. É importante destacar que tal aspecto também é válido para propriedades definidas como somente leitura, dispensando assim a necessidade de utilização de referências criadas apenas para o armazenamento de um valor.
Esta nova versão da linguagem C# trouxe ainda uma outra alternativa no que se refere à inicialização de propriedades read-only. Além da especificação de um valor na própria declaração de um item deste tipo, agora também é possível efetuar tal associação no construtor da classe em questão (diferentemente do que acontecia em releases anteriores, como observado na próxima imagem em um exemplo no Visual Studio 2013).
Uma nova forma de inicialização
Na listagem a seguir está a implementação de uma classe chamada “MensagemLog”, em que a propriedade somente leitura “Data” está sendo preenchida no construtor do tipo:
using System;
namespace TesteInicializacaoPropriedadesReadOnlyConstrutor
{
public enum TipoLog
{
Informacao,
Alerta,
Erro
}
public class MensagemLog
{
public DateTime Data { get; }
public TipoLog Tipo { get; set; }
public string Mensagem { get; set; }
public MensagemLog()
{
this.Data = DateTime.Now;
this.Tipo = TipoLog.Informacao;
}
}
}
Já na próxima listagem é demonstrada a utilização da classe MensagemLog (cujas instâncias servem de base para que o método ExibirConteudoLog mostre informações de registros de log):
using System;
namespace TesteInicializacaoPropriedadesReadOnlyConstrutor
{
class Program
{
public static string ExibirConteudoLog(MensagemLog log)
{
return String.Format(
"*** Mensagem de Log ***\nData: {0}\nTipo: {1}\nMensagem: {2}",
log.Data, log.Tipo, log.Mensagem);
}
static void Main(string[] args)
{
MensagemLog msgLog = new MensagemLog();
Console.WriteLine(
"Valores do objeto MensagemLog logo após a inicialização...\n");
Console.WriteLine(ExibirConteudoLog(msgLog));
msgLog.Tipo = TipoLog.Alerta;
msgLog.Mensagem = "Exemplo de mensagem de alerta.";
Console.WriteLine(
"\n\nValores do objeto MensagemLog logo após alterações...\n");
Console.WriteLine(ExibirConteudoLog(msgLog));
Console.ReadKey();
}
}
}
A execução deste programa de testes produzirá um resultado similar ao que consta na imagem a seguir:
Links
C# 6.0 - Novos Recursos (Exemplos)
https://gallery.technet.microsoft.com/C-60-Novos-Recursos-d22a7d9d
New Language Features in C# 6
https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
.NET Coders – Blog
http://netcoders.com.br/blog/
.NET Coders – Facebook
https://www.facebook.com/groups/netcoders/
.NET Coders – Meetup
http://www.meetup.com/pt/NetCoders/