SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Plataforma de compiladores .NET,
Visual Studio 2015, C# 6 e futuro C# 7
Rogério Moraes de Carvalho
Consultor e instrutor de TI
rogeriom.wordpress.com | @rogeriomc
Agenda
Plataforma de compiladores .NET & Visual Studio 2015
Plataforma de compiladores .NET (“Roslyn”)
Evolução do projeto “Roslyn”
Linha de produtos comerciais do Visual Studio 2015
Linha de produtos gratuitos do Visual Studio 2015
Visual Studio Online e Visual Studio Code
Visual Studio 2015 RTM
Agenda
Novidades da linguagem de programação C# 6
Construtores primários (C# 7)
Avanços em propriedades automáticas
Atribuição de propriedades automáticas somente com get no construtor
using estático
await em blocos catch e finally
Filtros de exceção
Operadores nulos-condicionais
Expressões nameof
Agenda
Novidades da linguagem de programação C# 6
Expressões de declaração (C# 7)
Expressões de corpo em membros de função
Iniciadores de índice
Literais binários e separadores de dígitos (C# 7)
Interpolação de strings
Ferramentas e documentação
Recursos adicionais
Plataforma de compiladores .NET &
Visual Studio 2015
Plataforma de compiladores .NET (“Roslyn”)
Plataforma de compiladores .NET & Visual Studio 2015
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 GitHub
https://github.com/dotnet/roslyn
Plataforma de compiladores .NET
Evolução do projeto “Roslyn”
Plataforma de compiladores .NET & Visual Studio 2015
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
(posteriormente: CTP 2, CTP 3, CTP 4)
03
jun
2014
Visual Studio 2015 CTP 5
(posteriormente: CTP 6)
16
jan
2015
Visual Studio 2015 RC
29
abr
2015
Visual Studio 2015 RTM
20
jul
2015
Linha de produtos comerciais do Visual Studio 2015
Plataforma de compiladores .NET & Visual Studio 2015
Visual Studio Professional 2013 with MSDN
Visual Studio Premium 2013 with MSDN
Visual Studio Ultimate 2013 with MSDN
Visual Studio Professional 2015 with MSDN
Visual Studio Enterprise 2015 with MSDN
Visual Studio Test Professional 2013 Visual Studio Test Professional 2015
Visual Studio Team Foundation Server 2013 Visual Studio Team Foundation Server 2015 RC 2
Linha de produtos gratuitos do Visual Studio 2015
Plataforma de compiladores .NET & Visual Studio 2015
Visual Studio Community 2013
Visual Studio Express for Desktop 2013
Visual Studio Community 2015
Visual Studio Express for Desktop 2015
Visual Studio Express for Web 2013 Visual Studio Express for Web 2015
Visual Studio Express for Windows 2015Novo
Em
breve
Visual Studio Team Foundation Server Express
2013
Visual Studio Team Foundation Server Express
2015
Visual Studio Online e Visual Studio Code
Plataforma de compiladores .NET & Visual Studio 2015
Visual Studio Online (www.visualstudio.com)
Conjunto de serviços na nuvem para times de desenvolvimento de software
Para qualquer linguagem e tudo em um pacote único
Java, Python, HTML5, JavaScript, C#, ...
Complemento para ambientes integrados de desenvolvimento
Visual Studio, Eclipse, Xcode, ...
Grátis para times de 5 usuários, com repositórios privados ilimitados
Visual Studio Code (code.visualstudio.com)
Editor gratuito da Microsoft para desenvolvimento de aplicações para web/nuvem
Disponível para Linux, Mac OS X e Windows (atualmente na versão 0.5.0)
Visual Studio 2015 RTM
Plataforma de compiladores .NET & Visual Studio 2015
Linguagens de programação
C#
Visual Basic
Visual C++
F#
JavaScript
TypeScript
Desenvolvimento para Windows 10
Visual Studio Tools for Universal
Windows App Development
Desenvolvimento móvel
Visual C++ for Cross-Platform Mobile
Development
Visual Studio Tools for Apache Cordova
Visual Studio Emulator for Android
Xamarin (terceiros: Xamarin Inc.)
Frameworks
.NET Framework 4.6
Entity Framework
ASP.NET
Visual Studio 2015 RTM
Plataforma de compiladores .NET & Visual Studio 2015
Codificação com qualidade
Visual Studio IDE
Depuração e diagnósticos
IntelliTest
Application Insights
Release Management
Git Version Control
CodeLens
Arquitetura, projeto e modelagem
Produtividade em interfaces XAML
Blend
XAML Language Service
Gerenciamento de pacotes
NuGet
Correções de bugs
Diversos outros recursos
Visual Studio 2015 RTM
Plataforma de compiladores .NET & Visual Studio 2015
Extensões
Azure SDK 2.7 for .NET
Python Tools for Visual Studio 2.2 (RTM)
Visual Studio Tools for Unity 2.0 (RTM)
Node.js Tools for Visual Studio 1.1 (RC)
Office Developer Tools for Visual Studio 2015
GitHub Extension for Visual Studio 2015 (RTM)
Cloud-based Load Testing
Novidades da linguagem de programação C# 6
e o futuro C# 7
Construtores primários (C# 7)
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Construtores primários (C# 7)
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Construtores primários (C# 7)
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Avanços em propriedades automáticas
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Avanços em propriedades automáticas
Novidades da linguagem de programação C# 6 e o futuro C# 7
Propriedades automáticas podem ser iniciadas em construtores
Sejam as propriedades automáticas somente com get ou com get e set
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
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Novidades da linguagem de programação C# 6 e o futuro C# 7
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 nulo-condicionais
Novidades da linguagem de programação C# 6 e o futuro C# 7
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
Novidades da linguagem de programação C# 6 e o futuro C# 7
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 corpo em membros de função
Novidades da linguagem de programação C# 6 e o futuro C# 7
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);
}
Expressões de declaração (C# 7)
Novidades da linguagem de programação C# 6 e o futuro C# 7
Permite declarar variáveis locais no meio de uma expressão
A declaração pode estar com ou sem um iniciador
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
Iniciadores de índice
Novidades da linguagem de programação C# 6 e o futuro C# 7
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 (C# 7)
Novidades da linguagem de programação C# 6 e o futuro C# 7
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 TitulosPalestrante {
MostValuableProfessional = 1,
MicrosoftCertifiedSolutionDeveloper = 2,
MicrosoftCertifiedTrainer = 4,
MvpMcsdMct = 7
}
[Flags] public enum TitulosPalestrante {
MostValuableProfessional = 0b000_001,
MicrosoftCertifiedSolutionDeveloper = 0b000_010,
MicrosoftCertifiedTrainer = 0b000_100,
MvpMcsdMct = 0b000_111
}
C# 7
Interpolação de strings
Novidades da linguagem de programação C# 6 e o futuro C# 7
Açúcar sintático para uma chamada do método estático 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}";
Recursos adicionais
Ferramentas e documentação
Microsoft Virtual Academy
www.microsoftvirtualacademy.com
MSDN Channel 9
channel9.msdn.com
MSDN Library
msdn.microsoft.com/library
C# 6 Language Specification
Ainda não está disponível
Visual Studio 2015/Online/Code
www.visualstudio.com
.NET Compiler Platform ("Roslyn")
github.com/dotnet/roslyn
.NET Foundation
www.dotnetfoundation.org
GitHub – ASP.NET 5 Home
github.com/aspnet/home
The ASP.NET Site
www.asp.net

Mais conteúdo relacionado

Mais procurados

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
 
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...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
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoreRogério Moraes de Carvalho
 
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
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)André Justi
 
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
 
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
 
Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - KotlinAndré Justi
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4CDS
 
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
 
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
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Pythonchackero
 

Mais procurados (20)

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...
 
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
 
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...
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
 
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...
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
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 ...
 
Java VS Kotlin
Java VS KotlinJava VS Kotlin
Java VS Kotlin
 
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
 
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
 
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
 
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
 
Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 
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)
 
Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - Kotlin
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
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
 
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 ...
 
Fundamentos de Objetos Remotos
Fundamentos de Objetos RemotosFundamentos de Objetos Remotos
Fundamentos de Objetos Remotos
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
 

Semelhante a Plataforma .NET, Visual Studio 2015, C# 6 e futuro C# 7

Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
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
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net codersRenato Groff
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokWellington Pinheiro
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Alexandre Tarifa
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidVinícius Thiengo
 
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al....NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...Renato Groff
 
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
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
TDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código JavaTDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código Javatdc-globalcode
 
.NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade...
.NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade....NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade...
.NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade...Renato Groff
 
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex MagalhaesKotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex MagalhaesAlex Magalhaes
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
c-gui-programming-with-qt-4-2ndedition -Cap1e2
c-gui-programming-with-qt-4-2ndedition -Cap1e2c-gui-programming-with-qt-4-2ndedition -Cap1e2
c-gui-programming-with-qt-4-2ndedition -Cap1e2Cedemir Pereira
 

Semelhante a Plataforma .NET, Visual Studio 2015, C# 6 e futuro C# 7 (20)

Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
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...
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net coders
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com Lombok
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
C++11
C++11C++11
C++11
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI Android
 
C# básica
C#   básicaC#   básica
C# básica
 
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al....NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
 
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
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
TDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código JavaTDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código Java
 
.NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade...
.NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade....NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade...
.NET Core 3.0 e ASP.NET Core 3.0 Deep Dive: conhecendo as principais novidade...
 
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex MagalhaesKotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
c-gui-programming-with-qt-4-2ndedition -Cap1e2
c-gui-programming-with-qt-4-2ndedition -Cap1e2c-gui-programming-with-qt-4-2ndedition -Cap1e2
c-gui-programming-with-qt-4-2ndedition -Cap1e2
 
Grails
GrailsGrails
Grails
 

Mais de 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
 
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
 
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
 
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
 

Mais de Rogério Moraes de Carvalho (14)

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
 
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
 
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...
 
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
 
`
``
`
 
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
 

Plataforma .NET, Visual Studio 2015, C# 6 e futuro C# 7

  • 1. Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7 Rogério Moraes de Carvalho Consultor e instrutor de TI rogeriom.wordpress.com | @rogeriomc
  • 2. Agenda Plataforma de compiladores .NET & Visual Studio 2015 Plataforma de compiladores .NET (“Roslyn”) Evolução do projeto “Roslyn” Linha de produtos comerciais do Visual Studio 2015 Linha de produtos gratuitos do Visual Studio 2015 Visual Studio Online e Visual Studio Code Visual Studio 2015 RTM
  • 3. Agenda Novidades da linguagem de programação C# 6 Construtores primários (C# 7) Avanços em propriedades automáticas Atribuição de propriedades automáticas somente com get no construtor using estático await em blocos catch e finally Filtros de exceção Operadores nulos-condicionais Expressões nameof
  • 4. Agenda Novidades da linguagem de programação C# 6 Expressões de declaração (C# 7) Expressões de corpo em membros de função Iniciadores de índice Literais binários e separadores de dígitos (C# 7) Interpolação de strings Ferramentas e documentação Recursos adicionais
  • 5. Plataforma de compiladores .NET & Visual Studio 2015
  • 6. Plataforma de compiladores .NET (“Roslyn”) Plataforma de compiladores .NET & Visual Studio 2015 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 GitHub https://github.com/dotnet/roslyn Plataforma de compiladores .NET
  • 7. Evolução do projeto “Roslyn” Plataforma de compiladores .NET & Visual Studio 2015 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 (posteriormente: CTP 2, CTP 3, CTP 4) 03 jun 2014 Visual Studio 2015 CTP 5 (posteriormente: CTP 6) 16 jan 2015 Visual Studio 2015 RC 29 abr 2015 Visual Studio 2015 RTM 20 jul 2015
  • 8. Linha de produtos comerciais do Visual Studio 2015 Plataforma de compiladores .NET & Visual Studio 2015 Visual Studio Professional 2013 with MSDN Visual Studio Premium 2013 with MSDN Visual Studio Ultimate 2013 with MSDN Visual Studio Professional 2015 with MSDN Visual Studio Enterprise 2015 with MSDN Visual Studio Test Professional 2013 Visual Studio Test Professional 2015 Visual Studio Team Foundation Server 2013 Visual Studio Team Foundation Server 2015 RC 2
  • 9. Linha de produtos gratuitos do Visual Studio 2015 Plataforma de compiladores .NET & Visual Studio 2015 Visual Studio Community 2013 Visual Studio Express for Desktop 2013 Visual Studio Community 2015 Visual Studio Express for Desktop 2015 Visual Studio Express for Web 2013 Visual Studio Express for Web 2015 Visual Studio Express for Windows 2015Novo Em breve Visual Studio Team Foundation Server Express 2013 Visual Studio Team Foundation Server Express 2015
  • 10. Visual Studio Online e Visual Studio Code Plataforma de compiladores .NET & Visual Studio 2015 Visual Studio Online (www.visualstudio.com) Conjunto de serviços na nuvem para times de desenvolvimento de software Para qualquer linguagem e tudo em um pacote único Java, Python, HTML5, JavaScript, C#, ... Complemento para ambientes integrados de desenvolvimento Visual Studio, Eclipse, Xcode, ... Grátis para times de 5 usuários, com repositórios privados ilimitados Visual Studio Code (code.visualstudio.com) Editor gratuito da Microsoft para desenvolvimento de aplicações para web/nuvem Disponível para Linux, Mac OS X e Windows (atualmente na versão 0.5.0)
  • 11. Visual Studio 2015 RTM Plataforma de compiladores .NET & Visual Studio 2015 Linguagens de programação C# Visual Basic Visual C++ F# JavaScript TypeScript Desenvolvimento para Windows 10 Visual Studio Tools for Universal Windows App Development Desenvolvimento móvel Visual C++ for Cross-Platform Mobile Development Visual Studio Tools for Apache Cordova Visual Studio Emulator for Android Xamarin (terceiros: Xamarin Inc.) Frameworks .NET Framework 4.6 Entity Framework ASP.NET
  • 12. Visual Studio 2015 RTM Plataforma de compiladores .NET & Visual Studio 2015 Codificação com qualidade Visual Studio IDE Depuração e diagnósticos IntelliTest Application Insights Release Management Git Version Control CodeLens Arquitetura, projeto e modelagem Produtividade em interfaces XAML Blend XAML Language Service Gerenciamento de pacotes NuGet Correções de bugs Diversos outros recursos
  • 13. Visual Studio 2015 RTM Plataforma de compiladores .NET & Visual Studio 2015 Extensões Azure SDK 2.7 for .NET Python Tools for Visual Studio 2.2 (RTM) Visual Studio Tools for Unity 2.0 (RTM) Node.js Tools for Visual Studio 1.1 (RC) Office Developer Tools for Visual Studio 2015 GitHub Extension for Visual Studio 2015 (RTM) Cloud-based Load Testing
  • 14. Novidades da linguagem de programação C# 6 e o futuro C# 7
  • 15. Construtores primários (C# 7) Novidades da linguagem de programação C# 6 e o futuro C# 7 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
  • 16. Construtores primários (C# 7) Novidades da linguagem de programação C# 6 e o futuro C# 7 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
  • 17. Construtores primários (C# 7) Novidades da linguagem de programação C# 6 e o futuro C# 7 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
  • 18. Avanços em propriedades automáticas Novidades da linguagem de programação C# 6 e o futuro C# 7 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
  • 19. Avanços em propriedades automáticas Novidades da linguagem de programação C# 6 e o futuro C# 7 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
  • 20. Avanços em propriedades automáticas Novidades da linguagem de programação C# 6 e o futuro C# 7 Propriedades automáticas podem ser iniciadas em construtores Sejam as propriedades automáticas somente com get ou com get e set 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; } }
  • 21. using estático Novidades da linguagem de programação C# 6 e o futuro C# 7 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; ... } }
  • 22. await em blocos catch e finally Novidades da linguagem de programação C# 6 e o futuro C# 7 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(); }
  • 23. Filtros de exceção Novidades da linguagem de programação C# 6 e o futuro C# 7 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); }
  • 24. Operadores nulo-condicionais Novidades da linguagem de programação C# 6 e o futuro C# 7 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
  • 25. Expressões nameof Novidades da linguagem de programação C# 6 e o futuro C# 7 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; }
  • 26. Expressões de corpo em membros de função Novidades da linguagem de programação C# 6 e o futuro C# 7 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); }
  • 27. Expressões de declaração (C# 7) Novidades da linguagem de programação C# 6 e o futuro C# 7 Permite declarar variáveis locais no meio de uma expressão A declaração pode estar com ou sem um iniciador 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
  • 28. Iniciadores de índice Novidades da linguagem de programação C# 6 e o futuro C# 7 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" };
  • 29. Literais binários e separadores de dígitos (C# 7) Novidades da linguagem de programação C# 6 e o futuro C# 7 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 TitulosPalestrante { MostValuableProfessional = 1, MicrosoftCertifiedSolutionDeveloper = 2, MicrosoftCertifiedTrainer = 4, MvpMcsdMct = 7 } [Flags] public enum TitulosPalestrante { MostValuableProfessional = 0b000_001, MicrosoftCertifiedSolutionDeveloper = 0b000_010, MicrosoftCertifiedTrainer = 0b000_100, MvpMcsdMct = 0b000_111 } C# 7
  • 30. Interpolação de strings Novidades da linguagem de programação C# 6 e o futuro C# 7 Açúcar sintático para uma chamada do método estático 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}";
  • 31. Recursos adicionais Ferramentas e documentação Microsoft Virtual Academy www.microsoftvirtualacademy.com MSDN Channel 9 channel9.msdn.com MSDN Library msdn.microsoft.com/library C# 6 Language Specification Ainda não está disponível Visual Studio 2015/Online/Code www.visualstudio.com .NET Compiler Platform ("Roslyn") github.com/dotnet/roslyn .NET Foundation www.dotnetfoundation.org GitHub – ASP.NET 5 Home github.com/aspnet/home The ASP.NET Site www.asp.net