c# 6.0 - novos recursos (agosto/2015)

74
C# 6.0 - Novos Recursos Renato Groffe Agosto/2015

Upload: renato-groff

Post on 15-Aug-2015

850 views

Category:

Software


1 download

TRANSCRIPT

C# 6.0 - Novos Recursos

Renato GroffeAgosto/2015

Apresentação – Renato Groffe

Mais de 15 anos de experiência na área de Tecnologia

Pós-graduação em Engenharia de Software – ênfase em SOA

MBA em Business Intelligence

Graduação em Sistemas de Informação

Técnico em Processamento de Dados

MTAC (Microsoft Technical Audience Contributor), MCP, Microsoft Specialist, MCTS, OCA, ITIL, COBIT

Contatos Página no Facebook

https://www.facebook.com/RenatoGroffeSW

Perfil no Facebookhttps://www.facebook.com/renatogroff

LinkedInhttp://br.linkedin.com/in/renatogroffe

Recurso Utilizados

Microsoft Visual Studio Community 2015https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx

Visual Studio 2015 e C# 6.0 Alguns recursos da nova versão do Visual Studio Using Static O operador nameof Auto-Property Initializers Inicialização de propriedades somente leitura a partir de um

construtor Expression-bodied Members Inicialização de instâncias do tipo Dictionary Exception Filters Implementação de construtores sem parâmetros em structs String Interpolation Chamadas assíncronas em blocos catch e finally Null-conditional operator Null-conditional operator e delegates

Agenda

Visual Studio 2015 e C# 6.0 Lançamento das versões de avaliação do Visual Studio “14” em 2014

A IDE posteriormente foi renomada para Visual Studio 2015, contando com diversas melhorias → lançamento em Julho/2015 da versão RTM

C# 6.0 – nova versão da linguagem, também com melhorias visando simplificar o desenvolvimento

.NET Framework 4.6, com novo compilador (Roslyn)

Boa parte da plataforma .NET é agora open source, estando hospedada no GitHub

Plataforma Web totalmente reformulada => ASP.NET 5 e MVC 6◦ O namespace System.Web deixou de existir◦ Forte ênfase em cloud computing, JSON e utilização do NuGet

Um novo tipo de atalho no VS 2015 Símbolo de uma lâmpada (Light Bulb) – Quick Actions – Removendo using

desnecessários (exemplo):

Debug de expressões lambda Até o Visual Studio 2013 (ERRO):

Debug de expressões lambda O Visual Studio 2015 finalmente suporta esta funcionalidade:

A nova versão do utilitário NuGet

Interface nova inteiramente reformulada

A interface também deixou de ser um formulário modal

Possibilidade de seleção da versão de um package a partir de um combo

Funcionalidade para consolidar as diferentes versões de um package dentro de uma mesma solução

Resolução automática de conflitos envolvendo diferentes versões de uma mesma referência

A nova versão do utilitário NuGet

Nova interface:

A nova versão do utilitário NuGet

Selecionando a versão de um package:

Using Static

O uso de métodos estáticos é extremamente comum em C#:

◦ Conversão de valores (Classe System.Convert, por exemplo)

◦ Cálculos aritméticos (classe System.Math, por exemplo)

Using Static

Em versões anteriores do C#:

Using Static

O que é?

◦ Declaração do tipo que será utilizado no início de um arquivo .cs (através de uma instrução “using static”)

◦ Forma simples para invocação de métodos estáticos

◦ Código mais enxuto

Using Static

O Visual Studio 2015 já oferece suporte através do IntelliSense:

Using Static

O recurso Using Static no C# 6.0:

Using Static

Resultado dos testes:

O operador nameof

O que é?

◦ Permite a obtenção de nomes de variáveis e parâmetros (para possível utilização na gravação de registros de log)

◦ Dispensa o uso de strings, as quais poderiam ficar com conteúdo inválido caso os elementos a que se referem fossem renomeados

◦ Recurso disponível através da palavra-chave “nameof”

O operador nameof

O operador nameof no C# 6.0:

O operador nameof

Resultado dos testes:

Auto-Property Initializers

Especificação de valores default para propriedades em versões anteriores do C#:

◦ No construtor de uma classe (exceto propriedades somente leitura)

◦ Na declaração de atributos associados a propriedades

Auto-Property Initializers

Exemplo em versões anteriores do C#:

Auto-Property Initializers

O que é? :

◦ Inicialização de propriedades (mesmo aquelas somente leitura) no próprio ponto em que são declaradas

◦ Dispensa o uso de atributos privados, como acontecia anteriormente

Auto-Property Initializers

Exemplo de inicialização em C# 6.0:

Auto-Property Initializers

Testando a inicialização de propriedades:

Auto-Property Initializers

Resultado dos testes:

Inicialização de propriedades somente leitura a partir de um construtor

Além do mecanismo Auto-Property Initializer, agora também é possível a atribuição de valores a propriedades read-only no construtor de uma classe

Este recurso pode ser útil no preenchimento de propriedades com base em parâmetros informados a um construtor

Inicialização de propriedades somente leitura a partir de um construtor

Versões anteriores da linguagem C#:

Inicialização de propriedades somente leitura a partir de um construtor

Exemplo em C# 6.0:

Expression-bodied Members

Expressões lambda

◦ Disponíveis desde o C# 3.0

◦ Parte integrante da extensão LINQ (Language-Integrated Query)

◦ Um tipo de função anônima que busca simplificar e tornar mais enxuto o código

Expression-bodied Members

◦ Implementação de elementos a partir de expressões lambda

◦ Expression-bodied Property (para propriedades somente leitura)

◦ Expression-bodied Function

Expression-bodied Members

Exemplo de declaração de uma propriedade somente leitura:

Expression-bodied Members

Utilizando uma Expression-bodied Property:

Expression-bodied Members

Testando o uso de uma Expression-bodied Property:

Expression-bodied Members

Resultado do teste (Expression-bodied Property):

Expression-bodied Members

Exemplo de declaração de um método simples:

Expression-bodied Members

Utilizando uma Expression-bodied Function:

Expression-bodied Members

Testando o uso de uma Expression-bodied Function:

Expression-bodied Members

Resultado do teste (Expression-bodied Function):

Inicialização de instâncias do tipo Dictionary

Antes do C# 6.0 a inicialização de instâncias baseadas no tipo Dictionary poderia ser feita de duas maneiras:

◦ Através do método Add, logo após a geração da instância

◦ Pares de chave-valor separados por “{” e “}”, durante a instanciação do objeto

Inicialização de instâncias do tipo Dictionary

Utilizando o método Add:

Inicialização de instâncias do tipo Dictionary

Inicializando no momento da instanciação:

Inicialização de instâncias do tipo Dictionary

Com o C# 6.0 é possível uma terceira sintaxe, baseada no uso de colchetes e que guarda semelhanças com o padrão JSON:

Inicialização de instâncias do tipo Dictionary

Resultado da execução da aplicação de testes:

Exception Filters

Diferentes checagens envolvendo um mesmo tipo de exceção forçavam ao uso de vários “ifs”, em versões anteriores do C#:

Exception Filters

Implementação da classe TesteException:

Exception Filters Exception Filters são um recurso do C# 6.0 que possibilita o uso de

condições na própria cláusula catch (resultando em um código mais elegante):

Exception Filters

Resultado da execução da aplicação de testes:

String Interpolation

Manipulação de strings desde as primeiras versões do .NET Framework:

◦ Simples concatenação (tende a tornar o código mais poluído no caso de sequências grandes de texto)

◦ Uso de placeholders (índices numéricos delimitados por chaves), em conjunto com métodos como Format da classe String ou ainda, Write e WriteLine na classe Console

◦ Embora os placeholders representem a melhor alternativa, a inclusão de novos parâmetros em strings já existentes é um processo suscetível a erros

String Interpolation

Um primeiro exemplo de uso de placeholders:

String Interpolation Alterando o exemplo anterior (inclusão de um novo placeholder e alterações no

índice dos demais):

String Interpolation O que é?

◦ Possibilidade de utilizar diretamente expressões ao invés de placeholders numa string (o que não significa que seja necessário se valer de concatenação)

◦ As strings que fazem uso deste mecanismo devem ser iniciadas por “$” (dólar)

◦ As expressões devem estar delimitadas por chaves

◦ Dispensa o uso de métodos como o Format da classe String

String Interpolation Exemplo de uso deste recurso em C# 6.0:

String Interpolation O IntelliSense já suporta também este mecanismo:

String Interpolation Além de variáveis, propriedades e chamadas a métodos, expressões

baseadas no operador “?” também podem ser empregadas:

String Interpolation Resultado da execução do exemplo apresentado:

Chamadas assíncronas em blocos catch e finally

C# 5.0 => novo modelo para processamento assíncrono

◦ Palavras-chave async e await

◦ Namespace System.Threading.Tasks, com classes como Task e Parallel

◦ Grande utilidade na implementação de aplicações visuais, sobretudo aquelas voltadas a dispositivos móveis

Limitações◦ Impossibilidade de chamadas assíncronas em blocos catch e

finally

Chamadas assíncronas em blocos catch e finally Visual Studio 2013 (ERRO):

Chamadas assíncronas em blocos catch e finally C# 6.0:

Null-conditional operator NullReferenceException

◦ Desatenção◦ Serviço deixado “pela metade”

Necessidade de checagens, validando se referências estão ou não preenchidas

Muitas verificações ao longo de um sistema

Versões anteriores do C#:

Null-conditional operator

Null-conditional operator O que é?

◦ Símbolo “?” acompanhando referências Variáveis Propriedades Atributos de classes Métodos que produzem algum retorno

◦ Substitui o uso de “ifs”

C# 6.0 (código mais enxuto e de rápida leitura):

Null-conditional operator

C# 6.0 – resultado do bloco de testes:

Null-conditional operator

Null-conditional operator e delegates Delegates

◦ Implementação de eventos na plataforma .NET

◦ Uso de tipos derivados da classe EventArgs (namespace System)

◦ Palavras-chave “delegate” (declaração) e “event” (evento baseado em um delegate)

Exemplo de implementação de delegate:

Null-conditional operator e delegates

Exemplo de classe na qual é utilizado um evento:

Null-conditional operator e delegates

Utilizando o operador “?” => ERRO

Null-conditional operator e delegates

Solução => utilizar o método Invoke:

Null-conditional operator e delegates

Testando o uso do operador “?” com delegates:

Null-conditional operator e delegates

Resultado do teste:

Null-conditional operator e delegates

Dúvidas, sugestões???

Referências C# 6.0 – Novos Recursos – Parte 1

http://netcoders.com.br/blog/csharp-6-novos-recursos-parte-1/

C# 6.0 – Novos Recursos – Parte 2http://netcoders.com.br/blog/csharp-6-novos-recursos-parte-2/

C# 6.0 – Novos Recursos – Parte 3http://netcoders.com.br/blog/csharp-6-novos-recursos-parte-3/

C# 6.0 – Novos Recursos – Parte 4http://netcoders.com.br/blog/csharp-6-novos-recursos-parte-4/

C# 6.0 – Novos Recursos – Parte 5http://netcoders.com.br/blog/csharp-6-novos-recursos-parte-5/

Fontes dos exemplos abordados nesta apresentaçãohttps://gallery.technet.microsoft.com/C-60-Novos-Recursos-d22a7d9d

Obrigado!!!