Compartilhar via


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:

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/