Want create site? Find Free WordPress Themes and plugins.

csharp7-ref-returns

Neste terceiro post da série sobre novidades do C# 7 será apresentado em detalhes um recurso chamado Ref Returns.

Caso queira acompanhar as postagens anteriores consulte os links:

Novidades do C# 7 – Pattern Matching

Novidades do C# 7 – Binary Literals e Digit Separators

Configurando o uso do C# 7 no Visual Studio “15”

Para o exemplo descrito neste artigo foi utilizado um projeto baseado no template “Console Application” do Preview 2 do Visual Studio “15”, além da versão 4.6.1 do .NET Framework.

O download do novo Visual Studio pode ser realizado por meio do seguinte link:

https://www.visualstudio.com/en-us/news/releasenotes/vs15/vs15-relnotes

Para configurar o uso do C# 7 acessar a seção “Build”, dentro das propriedades do projeto. No campo “Conditional compilation symbols” (Imagem 1) incluir o valor __DEMO__.

csharp7-ref-internals-01
Imagem 1. Configurando um projeto para uso do C# 7

Ref Returns

Em releases anteriores do C# a utilização da palavra-chave ref se resumia à passagem de parâmetros por referência na invocação de métodos. Com a versão 7 esta capacidade foi estendida também para o retorno de métodos, sendo que este recurso foi batizado como Ref Returns.

Na Listagem 1 é possível observar um exemplo de uso de Ref Returns. A declaração do método ObterContador e o seu retorno foram marcados com a palavra-chave ref, indicando que o atributo privado _contador será devolvido como referência.

namespace TesteRefReturns
{
    public class ClasseExemplo
    {
        private int _contador = 0;

        public void Incrementar()
        {
            _contador++;
        }

        public int ObterValorContador()
        {
            return _contador;
        }

        public ref int ObterContador()
        {
            return ref _contador;
        }
    }
}

Listagem 1: Ref Returns

Já na Listagem 2 o método ObterContador é invocado, com o retorno do mesmo sendo vinculado à variável teste:

  • Importante destacar que em ambos os casos foi necessário utilizar a palavra-chave ref;
  • Alterações em teste serão refletidas em ClasseExemplo, já que tal variável nada mais é do que uma referência apontando para o atributo privado _contador.
using System;

namespace TesteRefReturns
{
    class Program
    {
        static void Main(string[] args)
        {
            ClasseExemplo exemplo = new ClasseExemplo();
            exemplo.Incrementar();
            Console.WriteLine(exemplo.ObterValorContador());

            ref int teste = ref exemplo.ObterContador();
            teste++;
            Console.WriteLine(exemplo.ObterValorContador());
            Console.ReadKey();
        }
    }
}

Listagem 2: Utilizando Ref Returns

O resultado da execução deste último trecho de código pode ser observado na Imagem 2:

csharp7-ref-internals-02
Imagem 2. Exemplo de utilização de Ref Returns

Conclusão

Do ponto de vista prático, a utilização de Ref Returns tende a não acontecer com tanta frequência. Espera-se que a adoção deste recurso fique restrita a cenários bem específicos, nas quais a performance na manipulação da memória consumida constitui um fator crítico (em situações similares àquelas envolvendo o uso de ponteiros em C++).

Espero que este conteúdo possa ter sido útil.

Até uma próxima oportunidade!

Referências

The Future of C# – Build 2016
https://channel9.msdn.com/Events/Build/2016/B889

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