SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
Plataforma de compiladores .NET (“Roslyn”),
C# 6 e Visual Studio “14”
Rogério Moraes de Carvalho
VITA Informática
rogeriom.wordpress.com | @rogeriomc
Agenda
Plataforma de compiladores .NET (“Roslyn”) e Visual Studio “14”
Projeto “Roslyn”
Evolução do projeto “Roslyn”
ASP.NET vNext
ASP.NET & ASP.NET vNext
Visual Studio “14” CTP 4
Experiências mais ricas no Visual Studio “14”
Agenda
Linguagem de programação C# 6
Estágio final de renovação da C# 6
Construtores primários
Avanços em propriedades
automáticas
Atribuição de autoprops somente
com get no construtor
using estático
await em blocos catch e finally
Filtros de exceção
Operadores nulos-condicionais
Expressões nameof
Expressões de declaração
Expressões de corpo em membros
de função
Iniciadores de índice
Literais binários e separadores de
dígitos
Interpolação de strings
C# 7
C# 7
Projeto “Roslyn”
O que é o projeto “Roslyn”?
Nova implementação dos
compiladores C# e Visual Basic
Feita em C# e Visual Basic
Com APIs públicas ricas
Open source no CodePlex
roslyn.codeplex.com
Plataforma de compiladores .NET
Evolução do projeto “Roslyn”
Início do projeto “Roslyn”, internamente
na Microsoft
jun
2009
Liberação do primeiro “Roslyn”
Community Technology Preview (CTP)
19
out
2011
“Roslyn” June 2012 CTP
(suporte ao VS 2010 SP1 e ao VS 2012 RC)
05
jun
2012
“Roslyn” September 2012 CTP
(suporte somente ao VS 2012 RTM)
17
set
2012
No Keynote do dia 2 do Build 2014, o
código-fonte do “Roslyn” foi aberto:
roslyn.codeplex.com
03
abr
2014
Visual Studio "14" CTP 1
(version 14.0.21730.1.DP)
03
jun
2014
Visual Studio "14" CTP 2
(version 14.0.21901.1.DP)
08
jul
2014
Visual Studio "14" CTP 3
(version 14.0.22013.1.DP)
18
ago
2014
Visual Studio "14" CTP 4
(version 14.0.22129.1.DP)
06
out
2014
ASP.NET vNext
O ASP.NET vNext é a próxima versão do ASP.NET
Reconstruído do zero para criar uma pilha .NET leve e compositiva
Unificação das APIs MVC, Web API e Web Pages
Um único framework, denominado MVC 6, independente do System.Web.dll
Compilação dinâmica, cross-platform e open source
Usa o compilador “Roslyn” e executa em Mac OS X e Linux (projeto Mono)
Agnóstico da plataforma de desenvolvimento e da hospedagem
Não depende do Visual Studio (desenvolvimento) e nem do IIS (hospedagem)
Pode usar um subconjunto do .NET Framework otimizado para a nuvem
ASP.NET & ASP.NET vNext
Websites Serviços
ASP.NET
ASP.NETvNext
Web Forms Signal R
ASP.NET MVC 6
Web Pages MVC Web API
Núcleo unificado
Visual Studio “14” CTP 4
ASP.NET vNext no Visual Studio “14” CTP 4
Inclui os pacotes alpha4 do ambiente de execução do ASP.NET vNext
Executa em Windows, Mac OS X e Linux
Mudanças na estrutura de projetos ASP.NET vNext em relação ao VS “14” CTP 3
.NET Framework vNext
Contém o RyuJIT: próxima geração do compilador JIT
Por enquanto, está sendo denominado .NET Framework 4.5.3 Preview
Atualização do .NET Framework 4 e versões posteriores
.NET Native
Correções no suporte parcial ao WCF
Experiências mais ricas no Visual Studio “14”
Integração com o “Roslyn”
Experiências melhoradas em:
IntelliSense
“Refatoração”
CodeLens
Depuração
Avanços em “refatoração”
Melhorias em “refatorações”
Renomeação
Extração de método
Duas novas “refatorações”
Introdução de variável local
Variável inline temporária
Estágio final de renovação da linguagem C# 6
Mudanças no conjunto de características da linguagem
Mads Torgersen – Program Manager for the C# Language (01/10/2014)
http://roslyn.codeplex.com/discussions/568820
Novos recursos na linguagem são secundários nesta versão
Foco principal na primeira versão da plataforma de compiladores .NET (“Roslyn”)
Características que estão sendo cortadas da linguagem C# 6
Construtores primários
Expressões de declaração
Há muito trabalho e esforço na implementação dos recursos cortados
Prorrogados para uma próxima versão da linguagem C# (provavelmente: C# 7)
Construtores primários
Parâmetros em classes e estruturas
Classes e estruturas com parâmetros definem construtores primários
Construtores primários simplificam a codificação
public class Trilha
{
private readonly int _id;
private readonly string _nome;
public Trilha(int id, string nome) {
_id = id;
_nome = nome;
}
public int Id { get { return _id; } }
public string Nome { get { return _nome; } }
}
public class Trilha(int id, string nome)
{
private readonly int _id = id;
private readonly string _nome = nome;
public int Id { get { return _id; } }
public string Nome { get { return _nome; } }
}
C# 7
C# 7
Construtores primários
Corpos de construtores primários
Muitos construtores inicializam campos e propriedades automáticas
Pode haver a necessidade de fazer outras coisas, como validar argumentos
public class Trilha
{
private readonly int _id;
private readonly string _nome;
public Trilha(int id, string nome) {
if (nome == null)
throw new ArgumentNullException("nome");
_id = id;
_nome = nome;
}
public int Id { get { return _id; } }
public string Nome { get { return _nome; } }
}
public class Trilha(int id, string nome)
{
{
if (nome == null)
throw new ArgumentNullException("nome");
}
private readonly int _id = id;
private readonly string _nome = nome;
public int Id { get { return _id; } }
public string Nome { get { return _nome; } }
}
C# 7
C# 7
Construtores primários
Construtores explícitos
Tipos com construtores primários podem definir outros construtores
Os outros construtores devem chamar o primário, de forma direta ou indireta
public class Trilha
{
private readonly int _id;
private readonly string _nome;
public Trilha(int id, string nome) {
if (nome == null)
throw new ArgumentNullException("nome");
_id = id;
_nome = nome;
}
public Trilha(string nome) : this(0, nome) { }
public int Id { get { return _id; } }
public string Nome { get { return _nome; } }
}
public class Trilha(int id, string nome)
{
{
if (nome == null)
throw new ArgumentNullException("nome");
}
private readonly int _id = id;
private readonly string _nome = nome;
public Trilha(string nome) : this(0, nome) { }
public int Id { get { return _id; } }
public string Nome { get { return _nome; } }
}
C# 7
C# 7
Avanços em propriedades automáticas
Iniciadores em propriedades automáticas
Inicia o campo de apoio, ao invés de acessar o membro de função set
Similar a campos, não podem referenciar o this (objeto ainda não inicializado)
Ideais para serem usados junto com construtores primários
public class Palestra
{
public Palestra(string titulo, DateTime inicio) {
_titulo = titulo;
_inicio = inicio;
}
private string _titulo;
public string Titulo {
get { return _titulo; } set { _titulo = value; }
}
private DateTime _inicio;
public DateTime Inicio {
get { return _inicio; } set { _inicio = value; }
}
}
public class Palestra(string titulo, DateTime inicio)
{
public string Titulo { get; set; } = titulo;
public DateTime Inicio { get; set; } = inicio;
}
C# 7
Avanços em propriedades automáticas
Propriedades automáticas somente com get
Nova possibilidade de propriedade automática somente com get
Neste caso, o campo de apoio é declarado como readonly
public class Trilha
{
public Trilha(int id, string nome) {
_id = id;
_nome = nome;
}
private readonly int _id;
public int Id { get { return _id; } }
private readonly string _nome;
public string Nome { get { return _nome; } }
}
public class Trilha(int id, string nome)
{
public int Id { get; } = id;
public string Nome { get; } = nome;
}
C# 7
Atribuição de autoprops somente com get em construtor
Propriedades automáticas somente com get podem ser iniciadas em
construtores
public class Trilha
{
public Trilha(int id, string nome) {
_id = id;
_nome = nome;
}
private readonly int _id;
public int Id { get { return _id; } }
private readonly string _nome;
public string Nome { get { return _nome; } }
}
public class Trilha
{
public Trilha(int id, string nome) {
Id = id;
Nome = nome;
}
public int Id { get; }
public string Nome { get; }
}
using estático
Permite especificar uma classe estática numa cláusula using
Os membros estáticos acessíveis ficam disponíveis sem a qualificação da classe
using System;
public class HomeController : Controller
{
public IActionResult Index()
{
ViewBag.NumeroNucleos = Environment.ProcessorCount;
...
}
}
using System.Environment;
public class HomeController : Controller
{
public IActionResult Index()
{
ViewBag.NumeroNucleos = ProcessorCount;
...
}
}
await em blocos catch e finally
Em C# 5 não é possível usar await em blocos catch e finally
Limitação significativa devido a uma dificuldade de implementação
Em C# 6, apesar da complexa implementação interna, é possível
Exception excecao = null;
try {
await repositorio.EstatisticasAsync(filtragem);
} catch (Exception ex) {
excecao = ex;
}
if (excecao != null) {
await Logger.EscreverLogAsync(excecao);
} else {
await repositorio.LiberarRecursosAsync();
}
try {
await repositorio.EstatisticasAsync(filtragem);
} catch (Exception ex) {
await Logger.EscreverLogAsync(excecao);
} finally {
await repositorio.LiberarRecursosAsync();
}
Filtros de exceção
Se o filtro for verdadeiro, então a captura é processada
Caso contrário, a exceção não é capturada
Recurso já disponível nas linguagens Visual Basic e F#
try {
palestras = repositorio.ConsultarPalestras().ToList();
}
catch (FormatException ex) if (ex.Message.StartsWith("The DateTime")) {
throw new RepositorioJsonException("Erro de formatação de data/horário na fonte de dados JSON.", ex);
}
Operadores nulos-condicionais
Operador nulo-condicional ?
Permite acessar membros e elementos quando o receptor não for nulo
Caso contrário, retorna nulo
int? totalTrilhas = trilhas?.Length; // null se trilhas for null
int totalTrilhas = trilhas?.Length ?? 0; // 0 se trilhas for null (combinado com o operador coalescente nulo)
Trilha primeiraTrilha = trilhas?[0]; // null se trilhas for null
int? totalPalestrasPrimeiraTrilha = trilhas?[0].Palestras?.Count(); // encadeamento de operadores nulo-condicionais
Expressões nameof
Retorna uma string com o nome de algum elemento do programa
Eventualmente é necessário, como nos seguintes exemplos:
No lançamento de uma exceção ArgumentException ou ArgumentNullException
Na implementação da interface INotifyPropertyChanged
public class Trilha(int id, string nome)
{
{
if (nome == null)
throw new ArgumentNullException("nome");
}
public int Id { get; } = id;
public string Nome { get; } = nome;
}
public class Trilha(int id, string nome)
{
{
if (nome == null)
throw new ArgumentNullException(nameof(nome));
}
public int Id { get; } = id;
public string Nome { get; } = nome;
}
Expressões de declaração
Permite declarar variáveis locais no meio de uma expressão
A declaração pode estar com ou sem um iniciador
C# 7
DateTime inicio;
if (DateTime.TryParse(sInicio, out inicio)) {
termino = inicio.AddMinutes(50);
}
if (DateTime.TryParse(sInicio, out DateTime inicio)) {
termino = inicio.AddMinutes(50);
}
TimeSpan tempoReal, tempoPlanejado;
if ((tempoReal = termino - inicio) >
(tempoPlanejado = TimeSpan.FromMinutes(50)))
{
TimeSpan tempoExcesso = tempoReal - tempoPlanejado;
...
}
if ((TimeSpan tempoReal = termino - inicio) >
(TimeSpan tempoPlanejado = TimeSpan.FromMinutes(50)))
{
TimeSpan tempoExcesso = tempoReal - tempoPlanejado;
...
}
C# 7
C# 7
Os escopos dos exemplos são diferentes
Expressões de corpo em membros de função
Métodos e similares ou propriedades somente com get e similares
Declaração de membros de função com expressões lambda
Mesma conveniência de expressões lambda com delegates
public class Trilha(int id, string nome)
{
public int Id { get; } = id;
public string Nome { get; } = nome;
public override string ToString() { return Nome; }
}
public class Trilha(int id, string nome)
{
public int Id { get; } = id;
public string Nome { get; } = nome;
public override string ToString() => Nome;
}
public class Palestra
{
...
public DateTime Inicio { get; set; }
public DateTime Termino
{
get { return Inicio.AddMinutes(50); }
}
}
public class Palestra
{
...
public DateTime Inicio { get; set; }
public DateTime Termino => Inicio.AddMinutes(50);
}
Iniciadores de índice
Nova sintaxe de iniciadores de dicionários e objetos com indexadores
Notação mais elegante, com o índice entre colchetes
Dictionary<int, string> descricoesNiveisPalestras =
new Dictionary<int, string> {
{100, "Conteúdo introdutório e de visão geral"},
{200, "Conteúdo intermediário"},
{300, "Conteúdo avançado"},
{400, "Conteúdo para especialista"}
};
Dictionary<int, string> descricoesNiveisPalestras =
new Dictionary<int, string> {
[100] = "Conteúdo introdutório e de visão geral",
[200] = "Conteúdo intermediário",
[300] = "Conteúdo avançado",
[400] = "Conteúdo para especialista"
};
Literais binários e separadores de dígitos
Literais binários pelo acréscimo do prefixo 0b
Muito útil nas configurações de indicadores (flags) de estado
Separadores de dígitos com caractere de sublinhado: _
Facilita a visualização de números com muitos dígitos
Sejam estes números decimais, hexadecimais ou binários
[Flags] public enum ParticipacoesPalestranteTdc {
Tdc2013SaoPaulo = 1,
Tdc2013Florianopolis = 2,
Tdc2013PortoAlegre = 4,
Tdc2014SaoPaulo = 8,
Tdc2014Florianopolis = 16,
Tdc2014PortoAlegre = 32,
Tdc2013Todas = 7,
Tdc2014Todas = 56,
TdcTodas = 63
}
[Flags] public enum ParticipacoesPalestranteTdc {
Tdc2013SaoPaulo = 0b000_001,
Tdc2013Florianopolis = 0b000_010,
Tdc2013PortoAlegre = 0b000_100,
Tdc2014SaoPaulo = 0b001_000,
Tdc2014Florianopolis = 0b010_000,
Tdc2014PortoAlegre = 0b100_000,
Tdc2013Todas = 0b000_111,
Tdc2014Todas = 0b111_000,
TdcTodas = 0b111_111
}
Interpolação de strings
Açúcar sintático para uma chamada do String.Format
string duracao =
string.Format(
"{0:hh:mm} às {1:hh:mm}",
palestra.Inicio,
palestra.Termino
);
string duracao =
"{palestra.Inicio:hh:mm} às {palestra.Termino:hh:mm}";
Demo:
Projeto ASP.NET vNext no Visual Studio “14” CTP 4
Criação de uma solução Tdc composta por 2 projetos
Tdc.Web – ASP.NET vNext Empty Web Application
Aplicação Web ASP.NET MVC para divulgar palestras do TDC
Tdc.Dados – ASP.NET vNext Class Library
Biblioteca de classes para acesso aos dados
Modelo: entidades de dados
Repositório: recuperação dos dados (armazenados em formato JSON)
Recursos adicionais
Microsoft Developer Network
.NET Compiler Platform ("Roslyn")
msdn.microsoft.com/roslyn
CodePlex (Projetos open source)
.NET Compiler Platform ("Roslyn")
roslyn.codeplex.com
VisualStudio.com
Visual Studio “14” CTPs
www.visualstudio.com/en-us/downloads/
visual-studio-14-ctp-vs
(Visual Studio “14” CTP 4 em 06/10/2014)
Channel 9
TechEd North America 2014
channel9.msdn.com/Events/TechEd/
NorthAmerica/2014
The Future of Visual Basic and C# (Nível 300)
The Future of .NET on the Server
INTRODUCING (Nível 300)
DEEP DIVE (Nível 400)
dotnetConf 2014
Conferência online gratuita
www.dotnetconf.net
videos.dotnetconf.net

Contenu connexe

Tendances

Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Rogério Moraes de Carvalho
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...Rogério Moraes de Carvalho
 
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataformaTDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataformatdc-globalcode
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework CoreRogério Moraes de Carvalho
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...Rogério Moraes de Carvalho
 
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7Rogério Moraes de Carvalho
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Rogério Moraes de Carvalho
 
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveisSeminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveisRogério Moraes de Carvalho
 
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...Rogério Moraes de Carvalho
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015Renato Groff
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net codersRenato Groff
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)Renato Groff
 

Tendances (20)

Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
 
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataformaTDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
 
Cebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET CoreCebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET Core
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
 
Docker com ASP.NET Core e Hospedagem no Azure
Docker com ASP.NET Core e Hospedagem no AzureDocker com ASP.NET Core e Hospedagem no Azure
Docker com ASP.NET Core e Hospedagem no Azure
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
 
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
 
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveisSeminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
 
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net coders
 
Apostila de C# & Asp.Net
Apostila de C# & Asp.NetApostila de C# & Asp.Net
Apostila de C# & Asp.Net
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 

En vedette

Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Rogério Moraes de Carvalho
 
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaRogério Moraes de Carvalho
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Uma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoUma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoRogério Moraes de Carvalho
 
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016Renato Groff
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...rafaelov
 
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONITOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONIFábio Delboni
 
Estruturas de Dados em C#
Estruturas de Dados em C#Estruturas de Dados em C#
Estruturas de Dados em C#Marcelo Charan
 
Sistemas de equações
 Sistemas de equações Sistemas de equações
Sistemas de equaçõesmarilia65
 
Programação c# - banco de dados
Programação   c# - banco de dadosProgramação   c# - banco de dados
Programação c# - banco de dadosdouglasschaefler
 

En vedette (13)

Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
 
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Uma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoUma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programação
 
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
 
Exercicios de C#
Exercicios de C#Exercicios de C#
Exercicios de C#
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONITOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
 
Estruturas de Dados em C#
Estruturas de Dados em C#Estruturas de Dados em C#
Estruturas de Dados em C#
 
Sistemas de equações
 Sistemas de equações Sistemas de equações
Sistemas de equações
 
Programação c# - banco de dados
Programação   c# - banco de dadosProgramação   c# - banco de dados
Programação c# - banco de dados
 

Similaire à Roslyn, C# 6, VS 14

Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETslides_teltools
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Javaelliando dias
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...JP Clementi
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)jose-junior89
 

Similaire à Roslyn, C# 6, VS 14 (20)

Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Aula5
Aula5Aula5
Aula5
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 
Java5
Java5Java5
Java5
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
C++11
C++11C++11
C++11
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 

Plus de Rogério Moraes de Carvalho

HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...Rogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realRogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebRogério Moraes de Carvalho
 
TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#Rogério Moraes de Carvalho
 
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#Rogério Moraes de Carvalho
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 

Plus de Rogério Moraes de Carvalho (11)

Tecnologias XML e XML no SQL Server 2016
Tecnologias XML eXML no SQL Server 2016Tecnologias XML eXML no SQL Server 2016
Tecnologias XML e XML no SQL Server 2016
 
Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016
 
`
``
`
 
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo real
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões Web
 
TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#
 
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 

Roslyn, C# 6, VS 14

  • 1. Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14” Rogério Moraes de Carvalho VITA Informática rogeriom.wordpress.com | @rogeriomc
  • 2. Agenda Plataforma de compiladores .NET (“Roslyn”) e Visual Studio “14” Projeto “Roslyn” Evolução do projeto “Roslyn” ASP.NET vNext ASP.NET & ASP.NET vNext Visual Studio “14” CTP 4 Experiências mais ricas no Visual Studio “14”
  • 3. Agenda Linguagem de programação C# 6 Estágio final de renovação da C# 6 Construtores primários Avanços em propriedades automáticas Atribuição de autoprops somente com get no construtor using estático await em blocos catch e finally Filtros de exceção Operadores nulos-condicionais Expressões nameof Expressões de declaração Expressões de corpo em membros de função Iniciadores de índice Literais binários e separadores de dígitos Interpolação de strings C# 7 C# 7
  • 4. Projeto “Roslyn” O que é o projeto “Roslyn”? Nova implementação dos compiladores C# e Visual Basic Feita em C# e Visual Basic Com APIs públicas ricas Open source no CodePlex roslyn.codeplex.com Plataforma de compiladores .NET
  • 5. Evolução do projeto “Roslyn” Início do projeto “Roslyn”, internamente na Microsoft jun 2009 Liberação do primeiro “Roslyn” Community Technology Preview (CTP) 19 out 2011 “Roslyn” June 2012 CTP (suporte ao VS 2010 SP1 e ao VS 2012 RC) 05 jun 2012 “Roslyn” September 2012 CTP (suporte somente ao VS 2012 RTM) 17 set 2012 No Keynote do dia 2 do Build 2014, o código-fonte do “Roslyn” foi aberto: roslyn.codeplex.com 03 abr 2014 Visual Studio "14" CTP 1 (version 14.0.21730.1.DP) 03 jun 2014 Visual Studio "14" CTP 2 (version 14.0.21901.1.DP) 08 jul 2014 Visual Studio "14" CTP 3 (version 14.0.22013.1.DP) 18 ago 2014 Visual Studio "14" CTP 4 (version 14.0.22129.1.DP) 06 out 2014
  • 6. ASP.NET vNext O ASP.NET vNext é a próxima versão do ASP.NET Reconstruído do zero para criar uma pilha .NET leve e compositiva Unificação das APIs MVC, Web API e Web Pages Um único framework, denominado MVC 6, independente do System.Web.dll Compilação dinâmica, cross-platform e open source Usa o compilador “Roslyn” e executa em Mac OS X e Linux (projeto Mono) Agnóstico da plataforma de desenvolvimento e da hospedagem Não depende do Visual Studio (desenvolvimento) e nem do IIS (hospedagem) Pode usar um subconjunto do .NET Framework otimizado para a nuvem
  • 7. ASP.NET & ASP.NET vNext Websites Serviços ASP.NET ASP.NETvNext Web Forms Signal R ASP.NET MVC 6 Web Pages MVC Web API Núcleo unificado
  • 8. Visual Studio “14” CTP 4 ASP.NET vNext no Visual Studio “14” CTP 4 Inclui os pacotes alpha4 do ambiente de execução do ASP.NET vNext Executa em Windows, Mac OS X e Linux Mudanças na estrutura de projetos ASP.NET vNext em relação ao VS “14” CTP 3 .NET Framework vNext Contém o RyuJIT: próxima geração do compilador JIT Por enquanto, está sendo denominado .NET Framework 4.5.3 Preview Atualização do .NET Framework 4 e versões posteriores .NET Native Correções no suporte parcial ao WCF
  • 9. Experiências mais ricas no Visual Studio “14” Integração com o “Roslyn” Experiências melhoradas em: IntelliSense “Refatoração” CodeLens Depuração Avanços em “refatoração” Melhorias em “refatorações” Renomeação Extração de método Duas novas “refatorações” Introdução de variável local Variável inline temporária
  • 10. Estágio final de renovação da linguagem C# 6 Mudanças no conjunto de características da linguagem Mads Torgersen – Program Manager for the C# Language (01/10/2014) http://roslyn.codeplex.com/discussions/568820 Novos recursos na linguagem são secundários nesta versão Foco principal na primeira versão da plataforma de compiladores .NET (“Roslyn”) Características que estão sendo cortadas da linguagem C# 6 Construtores primários Expressões de declaração Há muito trabalho e esforço na implementação dos recursos cortados Prorrogados para uma próxima versão da linguagem C# (provavelmente: C# 7)
  • 11. Construtores primários Parâmetros em classes e estruturas Classes e estruturas com parâmetros definem construtores primários Construtores primários simplificam a codificação public class Trilha { private readonly int _id; private readonly string _nome; public Trilha(int id, string nome) { _id = id; _nome = nome; } public int Id { get { return _id; } } public string Nome { get { return _nome; } } } public class Trilha(int id, string nome) { private readonly int _id = id; private readonly string _nome = nome; public int Id { get { return _id; } } public string Nome { get { return _nome; } } } C# 7 C# 7
  • 12. Construtores primários Corpos de construtores primários Muitos construtores inicializam campos e propriedades automáticas Pode haver a necessidade de fazer outras coisas, como validar argumentos public class Trilha { private readonly int _id; private readonly string _nome; public Trilha(int id, string nome) { if (nome == null) throw new ArgumentNullException("nome"); _id = id; _nome = nome; } public int Id { get { return _id; } } public string Nome { get { return _nome; } } } public class Trilha(int id, string nome) { { if (nome == null) throw new ArgumentNullException("nome"); } private readonly int _id = id; private readonly string _nome = nome; public int Id { get { return _id; } } public string Nome { get { return _nome; } } } C# 7 C# 7
  • 13. Construtores primários Construtores explícitos Tipos com construtores primários podem definir outros construtores Os outros construtores devem chamar o primário, de forma direta ou indireta public class Trilha { private readonly int _id; private readonly string _nome; public Trilha(int id, string nome) { if (nome == null) throw new ArgumentNullException("nome"); _id = id; _nome = nome; } public Trilha(string nome) : this(0, nome) { } public int Id { get { return _id; } } public string Nome { get { return _nome; } } } public class Trilha(int id, string nome) { { if (nome == null) throw new ArgumentNullException("nome"); } private readonly int _id = id; private readonly string _nome = nome; public Trilha(string nome) : this(0, nome) { } public int Id { get { return _id; } } public string Nome { get { return _nome; } } } C# 7 C# 7
  • 14. Avanços em propriedades automáticas Iniciadores em propriedades automáticas Inicia o campo de apoio, ao invés de acessar o membro de função set Similar a campos, não podem referenciar o this (objeto ainda não inicializado) Ideais para serem usados junto com construtores primários public class Palestra { public Palestra(string titulo, DateTime inicio) { _titulo = titulo; _inicio = inicio; } private string _titulo; public string Titulo { get { return _titulo; } set { _titulo = value; } } private DateTime _inicio; public DateTime Inicio { get { return _inicio; } set { _inicio = value; } } } public class Palestra(string titulo, DateTime inicio) { public string Titulo { get; set; } = titulo; public DateTime Inicio { get; set; } = inicio; } C# 7
  • 15. Avanços em propriedades automáticas Propriedades automáticas somente com get Nova possibilidade de propriedade automática somente com get Neste caso, o campo de apoio é declarado como readonly public class Trilha { public Trilha(int id, string nome) { _id = id; _nome = nome; } private readonly int _id; public int Id { get { return _id; } } private readonly string _nome; public string Nome { get { return _nome; } } } public class Trilha(int id, string nome) { public int Id { get; } = id; public string Nome { get; } = nome; } C# 7
  • 16. Atribuição de autoprops somente com get em construtor Propriedades automáticas somente com get podem ser iniciadas em construtores public class Trilha { public Trilha(int id, string nome) { _id = id; _nome = nome; } private readonly int _id; public int Id { get { return _id; } } private readonly string _nome; public string Nome { get { return _nome; } } } public class Trilha { public Trilha(int id, string nome) { Id = id; Nome = nome; } public int Id { get; } public string Nome { get; } }
  • 17. using estático Permite especificar uma classe estática numa cláusula using Os membros estáticos acessíveis ficam disponíveis sem a qualificação da classe using System; public class HomeController : Controller { public IActionResult Index() { ViewBag.NumeroNucleos = Environment.ProcessorCount; ... } } using System.Environment; public class HomeController : Controller { public IActionResult Index() { ViewBag.NumeroNucleos = ProcessorCount; ... } }
  • 18. await em blocos catch e finally Em C# 5 não é possível usar await em blocos catch e finally Limitação significativa devido a uma dificuldade de implementação Em C# 6, apesar da complexa implementação interna, é possível Exception excecao = null; try { await repositorio.EstatisticasAsync(filtragem); } catch (Exception ex) { excecao = ex; } if (excecao != null) { await Logger.EscreverLogAsync(excecao); } else { await repositorio.LiberarRecursosAsync(); } try { await repositorio.EstatisticasAsync(filtragem); } catch (Exception ex) { await Logger.EscreverLogAsync(excecao); } finally { await repositorio.LiberarRecursosAsync(); }
  • 19. Filtros de exceção Se o filtro for verdadeiro, então a captura é processada Caso contrário, a exceção não é capturada Recurso já disponível nas linguagens Visual Basic e F# try { palestras = repositorio.ConsultarPalestras().ToList(); } catch (FormatException ex) if (ex.Message.StartsWith("The DateTime")) { throw new RepositorioJsonException("Erro de formatação de data/horário na fonte de dados JSON.", ex); }
  • 20. Operadores nulos-condicionais Operador nulo-condicional ? Permite acessar membros e elementos quando o receptor não for nulo Caso contrário, retorna nulo int? totalTrilhas = trilhas?.Length; // null se trilhas for null int totalTrilhas = trilhas?.Length ?? 0; // 0 se trilhas for null (combinado com o operador coalescente nulo) Trilha primeiraTrilha = trilhas?[0]; // null se trilhas for null int? totalPalestrasPrimeiraTrilha = trilhas?[0].Palestras?.Count(); // encadeamento de operadores nulo-condicionais
  • 21. Expressões nameof Retorna uma string com o nome de algum elemento do programa Eventualmente é necessário, como nos seguintes exemplos: No lançamento de uma exceção ArgumentException ou ArgumentNullException Na implementação da interface INotifyPropertyChanged public class Trilha(int id, string nome) { { if (nome == null) throw new ArgumentNullException("nome"); } public int Id { get; } = id; public string Nome { get; } = nome; } public class Trilha(int id, string nome) { { if (nome == null) throw new ArgumentNullException(nameof(nome)); } public int Id { get; } = id; public string Nome { get; } = nome; }
  • 22. Expressões de declaração Permite declarar variáveis locais no meio de uma expressão A declaração pode estar com ou sem um iniciador C# 7 DateTime inicio; if (DateTime.TryParse(sInicio, out inicio)) { termino = inicio.AddMinutes(50); } if (DateTime.TryParse(sInicio, out DateTime inicio)) { termino = inicio.AddMinutes(50); } TimeSpan tempoReal, tempoPlanejado; if ((tempoReal = termino - inicio) > (tempoPlanejado = TimeSpan.FromMinutes(50))) { TimeSpan tempoExcesso = tempoReal - tempoPlanejado; ... } if ((TimeSpan tempoReal = termino - inicio) > (TimeSpan tempoPlanejado = TimeSpan.FromMinutes(50))) { TimeSpan tempoExcesso = tempoReal - tempoPlanejado; ... } C# 7 C# 7 Os escopos dos exemplos são diferentes
  • 23. Expressões de corpo em membros de função Métodos e similares ou propriedades somente com get e similares Declaração de membros de função com expressões lambda Mesma conveniência de expressões lambda com delegates public class Trilha(int id, string nome) { public int Id { get; } = id; public string Nome { get; } = nome; public override string ToString() { return Nome; } } public class Trilha(int id, string nome) { public int Id { get; } = id; public string Nome { get; } = nome; public override string ToString() => Nome; } public class Palestra { ... public DateTime Inicio { get; set; } public DateTime Termino { get { return Inicio.AddMinutes(50); } } } public class Palestra { ... public DateTime Inicio { get; set; } public DateTime Termino => Inicio.AddMinutes(50); }
  • 24. Iniciadores de índice Nova sintaxe de iniciadores de dicionários e objetos com indexadores Notação mais elegante, com o índice entre colchetes Dictionary<int, string> descricoesNiveisPalestras = new Dictionary<int, string> { {100, "Conteúdo introdutório e de visão geral"}, {200, "Conteúdo intermediário"}, {300, "Conteúdo avançado"}, {400, "Conteúdo para especialista"} }; Dictionary<int, string> descricoesNiveisPalestras = new Dictionary<int, string> { [100] = "Conteúdo introdutório e de visão geral", [200] = "Conteúdo intermediário", [300] = "Conteúdo avançado", [400] = "Conteúdo para especialista" };
  • 25. Literais binários e separadores de dígitos Literais binários pelo acréscimo do prefixo 0b Muito útil nas configurações de indicadores (flags) de estado Separadores de dígitos com caractere de sublinhado: _ Facilita a visualização de números com muitos dígitos Sejam estes números decimais, hexadecimais ou binários [Flags] public enum ParticipacoesPalestranteTdc { Tdc2013SaoPaulo = 1, Tdc2013Florianopolis = 2, Tdc2013PortoAlegre = 4, Tdc2014SaoPaulo = 8, Tdc2014Florianopolis = 16, Tdc2014PortoAlegre = 32, Tdc2013Todas = 7, Tdc2014Todas = 56, TdcTodas = 63 } [Flags] public enum ParticipacoesPalestranteTdc { Tdc2013SaoPaulo = 0b000_001, Tdc2013Florianopolis = 0b000_010, Tdc2013PortoAlegre = 0b000_100, Tdc2014SaoPaulo = 0b001_000, Tdc2014Florianopolis = 0b010_000, Tdc2014PortoAlegre = 0b100_000, Tdc2013Todas = 0b000_111, Tdc2014Todas = 0b111_000, TdcTodas = 0b111_111 }
  • 26. Interpolação de strings Açúcar sintático para uma chamada do String.Format string duracao = string.Format( "{0:hh:mm} às {1:hh:mm}", palestra.Inicio, palestra.Termino ); string duracao = "{palestra.Inicio:hh:mm} às {palestra.Termino:hh:mm}";
  • 27. Demo: Projeto ASP.NET vNext no Visual Studio “14” CTP 4 Criação de uma solução Tdc composta por 2 projetos Tdc.Web – ASP.NET vNext Empty Web Application Aplicação Web ASP.NET MVC para divulgar palestras do TDC Tdc.Dados – ASP.NET vNext Class Library Biblioteca de classes para acesso aos dados Modelo: entidades de dados Repositório: recuperação dos dados (armazenados em formato JSON)
  • 28. Recursos adicionais Microsoft Developer Network .NET Compiler Platform ("Roslyn") msdn.microsoft.com/roslyn CodePlex (Projetos open source) .NET Compiler Platform ("Roslyn") roslyn.codeplex.com VisualStudio.com Visual Studio “14” CTPs www.visualstudio.com/en-us/downloads/ visual-studio-14-ctp-vs (Visual Studio “14” CTP 4 em 06/10/2014) Channel 9 TechEd North America 2014 channel9.msdn.com/Events/TechEd/ NorthAmerica/2014 The Future of Visual Basic and C# (Nível 300) The Future of .NET on the Server INTRODUCING (Nível 300) DEEP DIVE (Nível 400) dotnetConf 2014 Conferência online gratuita www.dotnetconf.net videos.dotnetconf.net