Novidades do C# 9: Covariant Returns

Renato Groffe
3 min readOct 18, 2020

--

Neste oitavo artigo da série sobre novidades do C# 9 abordarei a utilização da funcionalidade denominada Covariant Returns.

Para os testes aqui detalhados implementei uma Console Application, utilizando para isto o Release Candidate 2 do .NET 5.0 em Windows e o Visual Studio 2019 16.8.0 Preview 4.0.

Considerando a listagem a seguir em que temos:

  • Implementações da classe abstrata Pessoa (Aluno e Professor);
  • E as especializações da classe AtividadeAcademica (Aula e ReuniaoDocencia), a qual conta com o método abstrato ListarParticipantes que retornará instâncias baseadas no tipo Pessoa;
  • Nota-se inclusive as implementações de ListarParticipantes em Aula e ReuniaoDocencia, as quais devolverão como resultado objetos dos tipos Aluno e Professor (estes 2 últimos especializações de Pessoa).

E a classe Program em que:

  • Foram utilizados objetos baseados nos tipos Aula (inicializada com instâncias de Aluno) e ReuniaoDocencia (recebendo em seu construtor instâncias de Professor);
  • Na linha 18 temos uma conversão do valor associado à referência participanteAula para o tipo Aluno, a fim de possibilitar o acesso ao valor da propriedade RA;
  • Já na linha 34 há outra conversão, desta vez empregando a classe Professor com o intuito de acessar o valor da propriedade CodFuncionario por meio da referência participanteReuniao.

Através do uso de Covariant Returns podemos refatorar as implementações de ListarParticipantes nas classes Aula e ReuniaoDocencia, retornando respectivamente instâncias baseadas nos tipos Aluno e Professor (linhas 35 e 50). Como tais referências são derivadas da classe Pessoa não existirão problemas com a definição de sobrecargas baseadas em especializações (por mais que no tipo AtividadeAcademica o método ListarParticipantes referencie Pessoa):

O código da classe Program também será alterado, eliminando assim a necessidade de um cast para os tipos Aluno e Professor nas linhas 18 e 34:

A seguir temos o resultado da execução desta aplicação:

E finalizo este post com um convite…

Procurando recolocação profissional? Ou então alavancar sua carreira, aprendendo tecnologias em alta? Que tal então aproveitar este momento em que estamos todos em casa fazendo um treinamento ONLINE e GRATUITO sobre administração de bancos de dados relacionais no Microsoft Azure?

Aproveite então esta oportunidade e participe deste minicurso que cobrirá o uso de Azure SQL, PostgreSQL e MySQL na nuvem Microsoft. Esta é mais uma iniciativa da comunidade Azure na Prática, prevista para a manhã do dia 07/11/2020 (sábado) das 09:00 às 11:30 — horário de Brasília.

Receba ao final um certificado de conclusão sem custo algum!

Para efetuar sua inscrição clique no link:

https://bit.ly/anp-bds-gratuito-blog-groffe

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker