Palestra Novidades da linguagem C# 6

Post on 18-Aug-2015

283 views 5 download

Transcript of Palestra Novidades da linguagem C# 6

Microsoft /web

®

Novidades

C# 6Renato HaddadMS Regional Director, MVP, MCTS, MCPDrehaddad@msn.com @rehaddadwww.renatohaddad.comhttp://weblogs.asp.net/renatohaddad

Agenda

inicialização de propriedades auto-properties

remover o Using de classes estáticas

inicializar dicionários

propagação de nulo

expression-bodied (variável com expressão)

interpolação de string, formatação,

uso de nameof no operador

await no catch/finally, filtros de exceção

Inicialização de propriedadesclass produto { public int ID { get; set; } public string Nome { get; set; } public decimal Preco { get; set; } public double Qtde { get; set; }}

class produto { public int ID { get; set; } public string Nome { get; set; } = "Produto novo"; public decimal Preco { get; set; } = 8.99M; public double Qtde{ get; set; } = 10; public bool Ativo { get; } = true;}

Inicialização de propriedades (constructor)class categoria { public int ID { get; set; } public string NomeCategoria { get; set; } public bool Ativa { get; }

public categoria() { Ativa = true; }}

class categoria { public int ID { get; set; } public string NomeCategoria { get; set; } public bool Ativa { get; } = true;}

Remover o Using de classes estáticasusing static System.Console;using static System.Math;

var anonimo = new {esporte = "kitesurf"};// 1 - uso normal//Console.WriteLine(anonimo.esporte);//Console.ReadLine();// 2 - remover usingWriteLine(anonimo.esporte);var valor = 98.4563M;WriteLine(Round(valor));WriteLine(Abs(valor));WriteLine(Sqrt(64));

ReadLine();

Inicializar dicionáriosvar cidades = new Dictionary<string, string> { ["SC"] = "Santa Catarina", ["SP"] = "São Paulo", ["RS"] = "Rio Grande do Sul"};WriteLine(cidades["SC"]);foreach (var item in cidades){ WriteLine($"{item.Key} - {item.Value}");

}

Inicializar dicionáriosvar paises = new Dictionary<int, string> { [1] = "Brasil", [2] = "Australia", [3] = "Nova Zelandia"};

new Dictionary<int, produto> { [1] = new produto { nome = "mouse", preco = 25}, [2] = new produto { nome = "ultrabook", preco = 2500}, [5] = new produto { nome = "impressora", preco = 500 }}.ToList().ForEach(p =>WriteLine($"índice: {p.Key} - {p.Value.nome} | preço: {p.Value.preco}"));

Propagação de nulo

class Medico { public int ID { get; set; } public string Nome { get; set; } public List<Paciente> Paciente { get; set; }}

class Paciente { public int ID { get; set; } public string NomePaciente { get; set; } public string Historico { get; set; } = "nada relatado"; public string Remedios { get; set; } public decimal ValorConsulta { get; set; }}

Propagação de nulo (?)WriteLine($"Dr(a) {objM.Nome} tem {(objM.Paciente != null ? objM.Paciente.Count() : 0)} pacientes");// substituir por

WriteLine($"Dr(a) {objM.Nome} tem {objM.Paciente?.Count ?? 0} pacientes");

decimal? receita = 0;if (objM.Paciente != null) { receita = objM.Paciente.Sum(v => v.ValorConsulta);}// substituir por

decimal? receita = objM.Paciente?.Sum(v => v.ValorConsulta);WriteLine(receita);

Expression-bodied (variável c/ expressão)public static decimal CalculaPreco(

decimal preco, int qtde) => preco * qtde;

WriteLine($"Valor do produto no estoque {CalculaPreco(10, 15)}");

Expression-bodied (variável c/ expressão)var c = new carro {ID = 1, Modelo = "JEEP", AnoFabricacao = 2007, KmRodados = 800, Litros = 42 };WriteLine($"O carro {c.Modelo}, fabricado em {c.AnoFabricacao} está com {c.Idade()} anos. Rodando {c.KmRodados} km com {c.Litros} litros, a média é de {c.Consumo():n2} km/litro.");

class carro { public int ID { get; set; } public string Modelo { get; set; } public int Litros { get; set; } public double KmRodados { get; set; } public int AnoFabricacao { get; set; } public double Consumo() => KmRodados / Litros; public string Idade() => (DateTime.Today.Year - AnoFabricacao).ToString();}

Expression-bodied (variável c/ expressão)var c = new carro {ID = 1, Modelo = "JEEP", AnoFabricacao = 2007, KmRodados = 800, Litros = 42 };WriteLine(c.ToString());

class carro { public int ID { get; set; } … public override string ToString() => $"{ID} : {Modelo}";}

Interpolação de string, formataçãostring empresa = "Microsoft";WriteLine($"Empresa = {empresa}, email enviado às {DateTime.Now:hh}");WriteLine($"Empresa = {empresa.ToUpper()}, by {DateTime.Today:dd/MM/yyyy}");

WriteLine($"email enviado às {DateTime.Now:hh:mm} - {DateTime.Today:dddd}");

WriteLine($"índice: {p.Key} - {p.Value.Nome} | preço: {p.Value.Preco}"));WriteLine($"Valor do produto no estoque {CalculaPreco(10, 15)}");WriteLine($"{c.Modelo} está com {c.Idade()} anos.");WriteLine($"Média de {c.Consumo():n2} km/litro.");WriteLine($"Média é de {(c?.ConsumoString() ?? "-----")} km/litro.");WriteLine(c.ToString());

Uso de nameof no operadorstring produto = "peixe";DateTime lancto = new DateTime(2012, 5, 15);

WriteLine($"o {produto} tem {Idade(lancto.Year)} anos");WriteLine($"o {produto} tem {(Idade(2020))} anos");

public static int Idade(int parametroAno) { if (parametroAno > DateTime.Today.Year) { //throw new Exception($"ano invalido {parametroAno}"); throw new Exception($"ano invalido {nameof(parametroAno)}"); } return DateTime.Today.Year - parametroAno;}

await no catch/finally, filtros de exceçãovar servico = new HttpClient();try { // código async await processamento await servico.DeleteAsync("http://servico.com");}catch (Exception ex) { //await código trata erro //await Log(ex.Message);}finally { //await código //await servico.Close(); await servico.CancelPendingRequests();}

Filtros no Exceptiontry { // algum código throw new Exception("tratar erro");}catch (Exception ex) when (ex.GetType() == typeof(SqlException)) { Console.WriteLine("erro customizado do SQL");}catch (Exception ex) when (ex.Message.Equals("tratar erro", StringComparison.CurrentCultureIgnoreCase)) { Console.WriteLine("erro customizado da mensagem");}catch (Exception ex) when (ex is SecurityException || ex is IOException) { Console.WriteLine("erro de segurança ou IO");}catch (Exception) { Console.WriteLine("erro genérico");}

© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to

be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.