Você está na página 1de 74

C# 6.

0 - Novos
Recursos
Renato Groffe
Agosto/2015

Apresentao Renato Groffe

Mais de 15 anos de experincia na rea de Tecnologia

Ps-graduao em Engenharia de Software nfase em SOA

MBA em Business Intelligence

Graduao em Sistemas de Informao

Tcnico em Processamento de Dados

MTAC (Microsoft Technical Audience Contributor), MCP,


Microsoft Specialist, MCTS, OCA, ITIL, COBIT

Contatos

Pgina no Facebook
https://www.facebook.com/RenatoGroffeSW

Perfil no Facebook
https://www.facebook.com/renatogroff

LinkedIn
http://br.linkedin.com/in/renatogroffe

Recurso Utilizados

Microsoft Visual Studio Community 2015


https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx

Agenda

Visual Studio 2015 e C# 6.0


Alguns recursos da nova verso do Visual Studio
Using Static
O operador nameof
Auto-Property Initializers
Inicializao de propriedades somente leitura a partir de um
construtor
Expression-bodied Members
Inicializao de instncias do tipo Dictionary
Exception Filters
Implementao de construtores sem parmetros em structs
String Interpolation
Chamadas assncronas em blocos catch e finally
Null-conditional operator
Null-conditional operator e delegates

Visual Studio 2015 e C# 6.0

Lanamento das verses de avaliao do Visual Studio 14 em 2014

A IDE posteriormente foi renomada para Visual Studio 2015, contando


com diversas melhorias lanamento em Julho/2015 da verso RTM

C# 6.0 nova verso da linguagem, tambm 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 utilizao do NuGet

Um novo tipo de atalho no VS


2015

Smbolo de uma lmpada (Light Bulb) Quick Actions Removendo using


desnecessrios (exemplo):

Debug de expresses lambda

At o Visual Studio 2013 (ERRO):

Debug de expresses lambda

O Visual Studio 2015 finalmente suporta esta funcionalidade:

A nova verso do utilitrio


NuGet

Interface nova inteiramente reformulada

A interface tambm deixou de ser um formulrio modal

Possibilidade de seleo da verso de um package a partir de um


combo

Funcionalidade para consolidar as diferentes verses de um


package dentro de uma mesma soluo

Resoluo automtica de conflitos envolvendo diferentes verses


de uma mesma referncia

A nova verso do utilitrio


NuGet

Nova interface:

A nova verso do utilitrio


NuGet

Selecionando a verso de um package:

Using Static

O uso de mtodos estticos extremamente comum em C#:


Converso de valores (Classe System.Convert, por exemplo)
Clculos aritmticos (classe System.Math, por exemplo)

Using Static

Em verses anteriores do C#:

Using Static

O que ?
Declarao do tipo que ser utilizado no incio de um arquivo .cs
(atravs de uma instruo using static)
Forma simples para invocao de mtodos estticos
Cdigo mais enxuto

Using Static

O Visual Studio 2015 j oferece suporte atravs do IntelliSense:

Using Static

O recurso Using Static no C# 6.0:

Using Static

Resultado dos testes:

O operador nameof

O que ?
Permite a obteno de nomes de variveis e parmetros (para
possvel utilizao na gravao de registros de log)
Dispensa o uso de strings, as quais poderiam ficar com
contedo invlido caso os elementos a que se referem fossem
renomeados
Recurso disponvel atravs da palavra-chave nameof

O operador nameof

O operador nameof no C# 6.0:

O operador nameof

Resultado dos testes:

Auto-Property Initializers

Especificao de valores default para propriedades em verses


anteriores do C#:
No construtor de uma classe (exceto propriedades somente
leitura)
Na declarao de atributos associados a propriedades

Auto-Property Initializers

Exemplo em verses anteriores do C#:

Auto-Property Initializers

O que ? :
Inicializao de propriedades (mesmo aquelas somente leitura)
no prprio ponto em que so declaradas
Dispensa o uso de atributos privados, como acontecia
anteriormente

Auto-Property Initializers

Exemplo de inicializao em C# 6.0:

Auto-Property Initializers

Testando a inicializao de propriedades:

Auto-Property Initializers

Resultado dos testes:

Inicializao de propriedades somente


leitura a partir de um construtor

Alm do mecanismo Auto-Property Initializer, agora tambm


possvel a atribuio de valores a propriedades read-only no
construtor de uma classe

Este recurso pode ser til no preenchimento de propriedades com


base em parmetros informados a um construtor

Inicializao de propriedades somente


leitura a partir de um construtor

Verses anteriores da linguagem C#:

Inicializao de propriedades somente


leitura a partir de um construtor

Exemplo em C# 6.0:

Expression-bodied Members

Expresses lambda
Disponveis desde o C# 3.0
Parte integrante da extenso LINQ (Language-Integrated Query)
Um tipo de funo annima que busca simplificar e tornar mais enxuto o cdigo

Expression-bodied Members
Implementao de elementos a partir de expresses lambda
Expression-bodied Property (para propriedades somente leitura)
Expression-bodied Function

Expression-bodied Members

Exemplo de declarao 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 declarao de um mtodo 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):

Inicializao de instncias do
tipo Dictionary

Antes do C# 6.0 a inicializao de instncias baseadas no tipo


Dictionary poderia ser feita de duas maneiras:
Atravs do mtodo Add, logo aps a gerao da instncia
Pares de chave-valor separados por { e }, durante a
instanciao do objeto

Inicializao de instncias do
tipo Dictionary

Utilizando o mtodo Add:

Inicializao de instncias do
tipo Dictionary

Inicializando no momento da instanciao:

Inicializao de instncias do
tipo Dictionary

Com o C# 6.0 possvel uma terceira sintaxe, baseada no uso de colchetes e que guarda
semelhanas com o padro JSON:

Inicializao de instncias do
tipo Dictionary

Resultado da execuo da aplicao de testes:

Exception Filters

Diferentes checagens envolvendo um mesmo tipo de exceo


foravam ao uso de vrios ifs, em verses anteriores do C#:

Exception Filters

Implementao da classe TesteException:

Exception Filters

Exception Filters so um recurso do C# 6.0 que possibilita o uso de condies


na prpria clusula catch (resultando em um cdigo mais elegante):

Exception Filters

Resultado da execuo da aplicao de testes:

String Interpolation

Manipulao de strings desde as primeiras verses do .NET


Framework:
Simples concatenao (tende a tornar o cdigo mais poludo no caso de
sequncias grandes de texto)
Uso de placeholders (ndices numricos delimitados por chaves), em conjunto com
mtodos como Format da classe String ou ainda, Write e WriteLine na classe
Console
Embora os placeholders representem a melhor alternativa, a incluso de novos
parmetros em strings j existentes um processo suscetvel a erros

String Interpolation

Um primeiro exemplo de uso de placeholders:

String Interpolation

Alterando o exemplo anterior (incluso de um novo placeholder e alteraes no ndice


dos demais):

String Interpolation

O que ?
Possibilidade de utilizar diretamente expresses ao invs
de placeholders numa string (o que no significa que seja
necessrio se valer de concatenao)
As strings que fazem uso deste mecanismo devem ser
iniciadas por $ (dlar)
As expresses devem estar delimitadas por chaves
Dispensa o uso de mtodos como o Format da classe String

String Interpolation

Exemplo de uso deste recurso em C# 6.0:

String Interpolation

O IntelliSense j suporta tambm este mecanismo:

String Interpolation

Alm de variveis, propriedades e chamadas a mtodos, expresses


baseadas no operador ? tambm podem ser empregadas:

String Interpolation

Resultado da execuo do exemplo apresentado:

Chamadas assncronas em blocos catch e


finally

C# 5.0 => novo modelo para processamento assncrono


Palavras-chave async e await
Namespace System.Threading.Tasks, com classes como Task e
Parallel
Grande utilidade na implementao de aplicaes visuais,
sobretudo aquelas voltadas a dispositivos mveis

Limitaes
Impossibilidade de chamadas assncronas em blocos catch e
finally

Chamadas assncronas em blocos catch e


finally

Visual Studio 2013 (ERRO):

Chamadas assncronas em blocos catch e


finally

C# 6.0:

Null-conditional operator

NullReferenceException
Desateno
Servio deixado pela metade

Necessidade de checagens, validando se


referncias esto ou no preenchidas

Muitas verificaes ao longo de um sistema

Null-conditional operator

Verses anteriores do C#:

Null-conditional operator

O que ?
Smbolo ? acompanhando referncias

Variveis
Propriedades
Atributos de classes
Mtodos que produzem algum retorno

Substitui o uso de ifs

Null-conditional operator

C# 6.0 (cdigo mais enxuto e de rpida leitura):

Null-conditional operator

C# 6.0 resultado do bloco de testes:

Null-conditional operator e
delegates

Delegates
Implementao de eventos na plataforma .NET
Uso de tipos derivados da classe EventArgs
(namespace System)
Palavras-chave delegate (declarao) e event
(evento baseado em um delegate)

Null-conditional operator e
delegates

Exemplo de implementao 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

Soluo => utilizar o mtodo Invoke:

Null-conditional operator e
delegates

Testando o uso do operador ? com delegates:

Null-conditional operator e
delegates

Resultado do teste:

Dvidas, sugestes???

Referncias

C# 6.0 Novos Recursos Parte 1


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

C# 6.0 Novos Recursos Parte 2


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

C# 6.0 Novos Recursos Parte 3


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

C# 6.0 Novos Recursos Parte 4


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

C# 6.0 Novos Recursos Parte 5


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

Fontes dos exemplos abordados nesta apresentao


https://gallery.technet.microsoft.com/C-60-Novos-Recursos-d22a7d9d

Obrigado!!!

Você também pode gostar