Want create site? Find Free WordPress Themes and plugins.

expression-00

Uma das novidades trazidas pelo C# 6.0 foi a possibilidade de implementar propriedades somente leitura e funções por meio de expressões lambda. Este recurso ficou conhecido como Expression-bodied Members, tendo sido abordado anteriormente em outro artigo deste blog.

O C# 7.0 expandiu as possibilidades de uso dos Expression-bodied Members, permitindo o uso de expressões lambda em construtores, finalizers e propriedades que aceitem a atribuição de valores (neste caso com as seções get e set presentes).

No exemplo a seguir é possível observar a implementação da classe CargaDados, com um construtor e um finalizer:

using System.IO;

namespace ExpressionBodiedMembers01
{
    class CargaDados
    {
        private string _tempDir;

        public CargaDados(string diretorioTemporario)
        {
            _tempDir = diretorioTemporario;
        }

        ~CargaDados()
        {
            Directory.Delete(_tempDir);
        }

        ...
    }
}

Já a próxima listagem traz o tipo CargaDados refatorado, com o construtor e o finalizer já utilizando uma expressão lambda em suas definições:

using System.IO;

namespace ExpressionBodiedMembers01
{
    class CargaDados
    {
        private string _tempDir;

        public CargaDados(string diretorioTemporario) =>
            _tempDir = diretorioTemporario;

        ~CargaDados() => Directory.Delete(_tempDir);

        ...
    }
}

A seguir está a implementação e um exemplo de uso da classe Cotacao:

using System;

namespace ExpressionBodiedMembers02
{
    public class Cotacao
    {
        public string Sigla { get; set; }
        public string NomeMoeda { get; set; }
        public DateTime UltimaAtualizacao { get; set; }

        private double _valor;

        public double Valor
        {
            get { return _valor; }
            set
            {
                _valor = value >= 0 ? value : 0;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Cotacao cotacao = new Cotacao();
            cotacao.Sigla = "USD";
            cotacao.NomeMoeda = "Dolar norte-americano";
            cotacao.UltimaAtualizacao =
                new DateTime(2017, 03, 10, 17, 59, 00);
            cotacao.Valor = 3.1435;

            Console.WriteLine(
                $"Moeda: {cotacao.NomeMoeda} ({cotacao.Sigla}) - " +
                $"Ultima Atualizacao: {cotacao.UltimaAtualizacao.ToString()} - " +
                $"Valor: {cotacao.Valor}");

            Console.ReadKey();
        }
    }
}

Também é possível alterar a classe Cotacao, de forma que a propriedade Valor faça uso de uma expressão lambda em sua definição:

using System;

namespace ExpressionBodiedMembers02
{
    public class Cotacao
    {
        public string Sigla { get; set; }
        public string NomeMoeda { get; set; }
        public DateTime UltimaAtualizacao { get; set; }

        private double _valor;

        // Expressões lambda na definição da propriedade Valor
        public double Valor
        {
            get => _valor;
            set => _valor = value >= 0 ? value : 0;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Cotacao cotacao = new Cotacao();
            cotacao.Sigla = "USD";
            cotacao.NomeMoeda = "Dolar norte-americano";
            cotacao.UltimaAtualizacao =
                new DateTime(2017, 03, 10, 17, 59, 00);
            cotacao.Valor = 3.1435;

            Console.WriteLine(
                $"Moeda: {cotacao.NomeMoeda} ({cotacao.Sigla}) - " +
                $"Ultima Atualizacao: {cotacao.UltimaAtualizacao.ToString()} - " +
                $"Valor: {cotacao.Valor}");

            Console.ReadKey();
        }
    }
}

Ao se executar este último exemplo teremos como resultado:

expression-01

**********

E por falar em .NET, deixo aqui um convite. No dia 07/04 (sexta) teremos um bate-papo online (hangout) no Canal .NET sobre as novidades do C# 7.0, às 21h00 - horário de Brasília. Será uma ótima oportunidade para todos aqueles interessados em conhecer mais sobre o que mudou na versão mais recente desta linguagem.

Para efetuar sua inscrição acesse este link, a transmissão será via YouTube em um link a ser divulgado futuramente.

**********

Referências

New Features in C# 7.0
https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Did you find apk for android? You can find new Free Android Games and apps.

Comentários

comentarios