C# 6.0
NOVOS RECURSOS
Renato Groffe
Microsoft Technical Audience Contributor (MTAC), MCP, MCTS, OCA, ITIL, COBIT
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
Articulista e Palestrante (Devmedia, .NET Magazine, Canal .NET, TechNet Wiki,
.NET Coders, TI Selvagem)
Técnico em Processamento de Dados
Contatos
◦ Facebook: https://www.facebook.com/renatogroff
◦ Canal .NET: https://www.facebook.com/canaldotnet
◦ LinkedIn: http://br.linkedin.com/in/renatogroffe
Agenda
◦ Visual Studio 2015, C# 6.0 e mais...
◦ Alguns recursos da nova versão do Visual Studio
◦ Novos recursos do C# 6.0
Visual Studio 2015, C# 6.0 e mais...
Visual Studio e o novo .NET
◦ 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
◦ O namespace System.Web deixou de existir
◦ Forte ênfase em cloud computing, JSON e utilização do NuGet
O novo .NET Framework
Alguns recursos da nova versão do Visual Studio
Um novo tipo de atalho
Símbolo de uma lâmpada (Light Bulb) – Quick Actions – Removendo using desnecessários (exemplo):
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:
Novos recursos do C# 6.0
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 – Exemplo
Auto-Property Initializers – O que são?
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 – O que são?
Exemplo em versões anteriores do C#:
Auto-Property Initializers – O que são?
◦ 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
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
Exemplo em C# 6.0:
Expression-bodied Members – O que são?
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 – O que são?
◦Implementação de elementos a partir de expressões lambda
◦Expression-bodied Property (para propriedades somente
leitura)
◦Expression-bodied Function
Expression-bodied Members – Propriedades
Agora também:Antes:
Expression-bodied Members – Métodos
Agora também:Antes:
Exception Filters – O que são?
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 – O que são?
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):
String Interpolation – O que é?
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 – O que é?
Exemplo de uso de placeholders:
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
◦ O próprio IntelliSense já suporta também este mecanismo
String Interpolation – Exemplo
Null-conditional operator – O que é?
◦ 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
Null-conditional operator – O que é?
Versões anteriores do C#:
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”
Null-conditional operator – Exemplo
Null-conditional operator – Delegates
Utilizar o método Invoke:
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 - Exemplo
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 – Exemplo
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
ou
Inicialização de instâncias do tipo Dictionary
Com o C# 6.0 é possível uma terceira sintaxe, baseada no uso
de colchetes:
C# 6.0 Referências
◦ Guia de Sobrevivência: C# 6.0
http://social.technet.microsoft.com/wiki/pt-br/contents/articles/32498.guia-de-sobrevivencia-c-6-0.aspx
◦ New Language Features in C# 6
https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
Perguntas?
Obrigado!

C# 6.0 - DotNetBaixada - Novembro/2015

  • 1.
  • 2.
    Renato Groffe Microsoft TechnicalAudience Contributor (MTAC), MCP, MCTS, OCA, ITIL, COBIT 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 Articulista e Palestrante (Devmedia, .NET Magazine, Canal .NET, TechNet Wiki, .NET Coders, TI Selvagem) Técnico em Processamento de Dados Contatos ◦ Facebook: https://www.facebook.com/renatogroff ◦ Canal .NET: https://www.facebook.com/canaldotnet ◦ LinkedIn: http://br.linkedin.com/in/renatogroffe
  • 3.
    Agenda ◦ Visual Studio2015, C# 6.0 e mais... ◦ Alguns recursos da nova versão do Visual Studio ◦ Novos recursos do C# 6.0
  • 4.
    Visual Studio 2015,C# 6.0 e mais...
  • 5.
    Visual Studio eo novo .NET ◦ 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 ◦ O namespace System.Web deixou de existir ◦ Forte ênfase em cloud computing, JSON e utilização do NuGet
  • 6.
    O novo .NETFramework
  • 7.
    Alguns recursos danova versão do Visual Studio
  • 8.
    Um novo tipode atalho Símbolo de uma lâmpada (Light Bulb) – Quick Actions – Removendo using desnecessários (exemplo):
  • 9.
    Debug de expressõeslambda O Visual Studio 2015 finalmente suporta esta funcionalidade:
  • 10.
    A nova versãodo 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
  • 11.
    A nova versãodo utilitário NuGet Nova interface:
  • 12.
  • 13.
    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
  • 14.
  • 15.
    Auto-Property Initializers –O que são? 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
  • 16.
    Auto-Property Initializers –O que são? Exemplo em versões anteriores do C#:
  • 17.
    Auto-Property Initializers –O que são? ◦ 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
  • 18.
  • 19.
    Inicialização de propriedadessomente 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
  • 20.
    Inicialização de propriedadessomente leitura a partir de um construtor Exemplo em C# 6.0:
  • 21.
    Expression-bodied Members –O que são? 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
  • 22.
    Expression-bodied Members –O que são? ◦Implementação de elementos a partir de expressões lambda ◦Expression-bodied Property (para propriedades somente leitura) ◦Expression-bodied Function
  • 23.
    Expression-bodied Members –Propriedades Agora também:Antes:
  • 24.
    Expression-bodied Members –Métodos Agora também:Antes:
  • 25.
    Exception Filters –O que são? Diferentes checagens envolvendo um mesmo tipo de exceção forçavam ao uso de vários “ifs”, em versões anteriores do C#:
  • 26.
    Exception Filters –O que são? 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):
  • 27.
    String Interpolation –O que é? 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
  • 28.
    String Interpolation –O que é? Exemplo de uso de placeholders:
  • 29.
    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 ◦ O próprio IntelliSense já suporta também este mecanismo
  • 30.
  • 31.
    Null-conditional operator –O que é? ◦ 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
  • 32.
    Null-conditional operator –O que é? Versões anteriores do C#:
  • 33.
    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”
  • 34.
  • 35.
    Null-conditional operator –Delegates Utilizar o método Invoke:
  • 36.
    Chamadas assíncronas emblocos 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
  • 37.
    Chamadas assíncronas emblocos catch e finally - Exemplo
  • 38.
    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”
  • 39.
    O operador nameof– Exemplo
  • 40.
    Inicialização de instânciasdo 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
  • 41.
    Inicialização de instânciasdo tipo Dictionary ou
  • 42.
    Inicialização de instânciasdo tipo Dictionary Com o C# 6.0 é possível uma terceira sintaxe, baseada no uso de colchetes:
  • 43.
    C# 6.0 Referências ◦Guia de Sobrevivência: C# 6.0 http://social.technet.microsoft.com/wiki/pt-br/contents/articles/32498.guia-de-sobrevivencia-c-6-0.aspx ◦ New Language Features in C# 6 https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
  • 44.
  • 45.