RogérioMoraesdeCarvalho
Consultoredesenvolvedordesistemas
rogeriomc.wordpress.com
@rogeriomc
C# 7: Olhando para o futuro
Visual Studio “15” Preview 2
O Preview 2 foi liberado em 10 de maio de 2016
www.visualstudio.com/downloads/visual-studio-next-downloads-vs (Download)
www.visualstudio.com/en-us/news/releasenotes/vs15-relnotes (Notas da versão)
Ativação de características experimentais do compilador C#
<Project ToolsVersion="15.0" ...>
...
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Features>binaryLiterals;digitSeparators;...</Features>
</PropertyGroup>
...
</Project>
Demo 1: Edição do arquivo .csproj para ativar características experimentais do C#
Literais binários
Representação de literais numéricos na base binária (2)
Sintaxe: 0bbn...b3b2b1 ou 0Bbn...b3b2b1, com b1, b2, b3, ..., bn  {0, 1} e n  1
[Flags]
public enum Assuntos {
AspNetCore = 0b00000001, // 1
DotNetCore = 0b00000010, // 2
EntityFrameworkCore = 0b00000100, // 4
FrameworksCore = 0b00000111, // 7
Conteiner = 0b00001000, // 8
IoT = 0b00010000, // 16
Azure = 0b00100000 // 32
}
Demo 2: Uso de literais binários numa enumeração com o atributo Flags
Separadores de dígitos
Separação de dígitos em literais com o caractere _
Exemplos: 0b0100_0111, 1_928_345, 0xF0_A8_D4_1A
[Flags]
public enum Assuntos {
AspNetCore = 0b0000_0001, // 1
DotNetCore = 0b0000_0010, // 2
EntityFrameworkCore = 0b0000_0100, // 4
FrameworksCore = 0b0000_0111, // 7
Conteiner = 0b0000_1000, // 8
IoT = 0b0001_0000, // 16
Azure = 0b0010_0000 // 32
}
Demo 3: Uso de separadores de dígitos em literais binários numa enumeração com o atributo Flags
Tuplas
Tipos tupla têm uma sintaxe similar a listas de parâmetros
A sintaxe (string trilha, int numeroPalestras) indica um tipo de estrutura
anônima com dois campos públicos: trilha do tipo string e numeroPalestras
do tipo int
public static IEnumerable<(string trilha, int numeroPalestras)>
PalestrasPorTrilha(this IEnumerable<Palestra> palestras) {
return from palestra in palestras
group palestra by palestra.Trilha into g
orderby g.Count() descending, g.Key
select (g.Key, g.Count());
}
Demo 4: Uso de tuplas no tipo de retorno de um método
Referências locais
Para permitir o uso de referências em variáveis locais
int a = 1;
ref int b = ref a;
Console.WriteLine($"a = {a}, b = {b}"); // a = 1, b = 1
a = 2;
Console.WriteLine($"a = {a}, b = {b}"); // a = 2, b = 2
Demo 5: Referências locais
Funções locais
Funções que são declaradas e utilizadas dentro de um
membro de função
static void Main(string[] args)
{
void imprimirPalestras(IEnumerable<Palestra> palestras)
{
foreach (var palestra in palestras) {
Console.WriteLine(palestra);
}
}
imprimirPalestras(obterPalestras());
}
Demo 6: Funções locais
Correspondência de padrão
Permite, por exemplo, o teste de um tipo e armazenamento
do tipo convertido numa variável
Palestra primeiraPalestra = obterPalestras().First();
if (primeiraPalestra is PalestraComTrilha primeiraPalestraComTrilha) {
Console.WriteLine(primeiraPalestraComTrilha.Trilha);
}
Demo 6: Correspondência de padrão
Perguntas&Repostas
RogérioMoraesdeCarvalho
Consultoredesenvolvedordesistemas
rogeriomc.wordpress.com
@rogeriomc

Visual Studio Summit 2016: C# 7 - Olhando para o futuro

  • 1.
  • 2.
    Visual Studio “15”Preview 2 O Preview 2 foi liberado em 10 de maio de 2016 www.visualstudio.com/downloads/visual-studio-next-downloads-vs (Download) www.visualstudio.com/en-us/news/releasenotes/vs15-relnotes (Notas da versão) Ativação de características experimentais do compilador C# <Project ToolsVersion="15.0" ...> ... <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Features>binaryLiterals;digitSeparators;...</Features> </PropertyGroup> ... </Project> Demo 1: Edição do arquivo .csproj para ativar características experimentais do C#
  • 3.
    Literais binários Representação deliterais numéricos na base binária (2) Sintaxe: 0bbn...b3b2b1 ou 0Bbn...b3b2b1, com b1, b2, b3, ..., bn  {0, 1} e n  1 [Flags] public enum Assuntos { AspNetCore = 0b00000001, // 1 DotNetCore = 0b00000010, // 2 EntityFrameworkCore = 0b00000100, // 4 FrameworksCore = 0b00000111, // 7 Conteiner = 0b00001000, // 8 IoT = 0b00010000, // 16 Azure = 0b00100000 // 32 } Demo 2: Uso de literais binários numa enumeração com o atributo Flags
  • 4.
    Separadores de dígitos Separaçãode dígitos em literais com o caractere _ Exemplos: 0b0100_0111, 1_928_345, 0xF0_A8_D4_1A [Flags] public enum Assuntos { AspNetCore = 0b0000_0001, // 1 DotNetCore = 0b0000_0010, // 2 EntityFrameworkCore = 0b0000_0100, // 4 FrameworksCore = 0b0000_0111, // 7 Conteiner = 0b0000_1000, // 8 IoT = 0b0001_0000, // 16 Azure = 0b0010_0000 // 32 } Demo 3: Uso de separadores de dígitos em literais binários numa enumeração com o atributo Flags
  • 5.
    Tuplas Tipos tupla têmuma sintaxe similar a listas de parâmetros A sintaxe (string trilha, int numeroPalestras) indica um tipo de estrutura anônima com dois campos públicos: trilha do tipo string e numeroPalestras do tipo int public static IEnumerable<(string trilha, int numeroPalestras)> PalestrasPorTrilha(this IEnumerable<Palestra> palestras) { return from palestra in palestras group palestra by palestra.Trilha into g orderby g.Count() descending, g.Key select (g.Key, g.Count()); } Demo 4: Uso de tuplas no tipo de retorno de um método
  • 6.
    Referências locais Para permitiro uso de referências em variáveis locais int a = 1; ref int b = ref a; Console.WriteLine($"a = {a}, b = {b}"); // a = 1, b = 1 a = 2; Console.WriteLine($"a = {a}, b = {b}"); // a = 2, b = 2 Demo 5: Referências locais
  • 7.
    Funções locais Funções quesão declaradas e utilizadas dentro de um membro de função static void Main(string[] args) { void imprimirPalestras(IEnumerable<Palestra> palestras) { foreach (var palestra in palestras) { Console.WriteLine(palestra); } } imprimirPalestras(obterPalestras()); } Demo 6: Funções locais
  • 8.
    Correspondência de padrão Permite,por exemplo, o teste de um tipo e armazenamento do tipo convertido numa variável Palestra primeiraPalestra = obterPalestras().First(); if (primeiraPalestra is PalestraComTrilha primeiraPalestraComTrilha) { Console.WriteLine(primeiraPalestraComTrilha.Trilha); } Demo 6: Correspondência de padrão
  • 9.