Your SlideShare is downloading. ×
  • Like
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

TechEd Brasil 2011 Review - Evolução da linguagem de programação C#

  • 490 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
490
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
8
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Evolução da linguagemde programação C#Rogério Moraes de CarvalhoVITA Informática@rogeriomcrogeriomc.wordpress.com
  • 2. A evolução da linguagem C#Evolução C# 6? Projeto Roslyn (?) C# 5 Windows Runtime, (2012) programação assíncrona, ... Objetos tipados dinamicamente, C# 4 parâmetros opcionais e nomeados, (Mar 2010) covariância e contravariância, … Language Integrated Query (LINQ), C# 3.0 expressões Lambda, métodos de (Nov 2007) extensão, tipos anônimos, ... Generics, Iterators, tipos parciais, C# 2.0 tipos anuláveis, classes estáticas, (Nov 2005) métodos anônimos, ... Código gerenciado, linguagem POO, C# 1.0 suporte nativo a propriedades e (Fev 2002) eventos, exceções, delegates, ...
  • 3. Sistema de tiposLinguagem C# 1.0 Suporte a duas categorias de tipos Tipos por valor Estruturas (incluindo os tipos simples) Enumerações Tipos por referência Arrays Classes Interfaces Delegates Sistema unificado de tipos object é base de todos tipos Boxing e Unboxing
  • 4. Memória e instruçõesLinguagem C# 1.0 Gerenciamento automático de memória Coletor de lixo (Garbage Collector) Instruções inspiradas em C/C++ e Java Blocos, rótulos, variáveis e expressões Laços: while, do...while, for e foreach Exceções: try...catch...finally, throw Condicionais: if e switch checked e unchecked using
  • 5. Herança e membros de classeLinguagem C# 1.0 Suporte a herança simples Membros possíveis em classes Constantes Campos Métodos Propriedades Eventos Operadores Indexadores Construtores Destrutores
  • 6. Atributos e outros recursosLinguagem C# 1.0 Atributos Elementos que permitem fazer anotações de forma declarativa Namespaces e assemblies Versionamento Resolve o problema conhecido como DLL Hell do modelo COM
  • 7. Generics e IteratorsPrincipais novidades da linguagem C# 2.0 Generics Os tipos genéricos permitem um alto nível de reutilização de código Permite a definição de tipos parametrizáveis Desempenho melhorado em classes de coleções Iterators Torna simples a definição de como um laço foreach vai interagir com o conteúdo de uma coleção
  • 8. Tipos parciais e anuláveisPrincipais novidades da linguagem C# 2.0 Tipos parciais As definições de classes, estruturas ou interfaces podem ser divididas em múltiplos arquivos O Visual Studio utiliza esta característica para separar o código gerado do código do usuário Tipos anuláveis Permite a uma variável de tipo por valor ter um valor indefinido Úteis ao se trabalhar com bancos de dados ou outras estruturas
  • 9. Métodos anônimos e ::Principais novidades da linguagem C# 2.0 Métodos anônimos Tornam possível a passagem de um bloco de código como um parâmetro Em qualquer lugar em que um delegate é esperado Qualificador de apelidos de namespace O novo operador (::) fornece maior controle no acesso de membros de um namespace Habilidade de acessar um membro no namespace global
  • 10. Classes estáticas e maisPrincipais novidades da linguagem C# 2.0 Classes estáticas Modo seguro e conveniente de declarar uma classe que contém somente membros estáticos e não deve ser instanciada Antes era necessário definir construtores de instância privados para não permitir que a mesma fosse instanciada Permite definir diferentes níveis de acesso nos métodos de leitura e escrita de uma propriedade
  • 11. Principais inovações Expressões dePrincipais novidades da linguagem C# 3.0 consulta var mulheres = from c in contatos where c.Sexo == Sexo.Feminino select new { c.Nome, c.Email }; Árvores de expressãoTipos implícitos em variáveis Expressões locais lambda Propriedades var mulheres = automáticas contatos .Where(c => c.Sexo == Sexo.Feminino) Métodos .Select(c => new {c.Nome, c.Email}); parciais Métodos de Tipos Iniciadores de extensão objetos Iniciadores de anônimos coleções
  • 12. LINQPrincipais novidades da linguagem C# 3.0 C# 3.0 VB 9.0 Outras linguagens… .NET LINQ (Language INtegrated Query) LINQ to LINQ to LINQ to LINQ to LINQ to Objects DataSets SQL Entities XML <agenda> <contato> <nome>. . . </nome> <email> . . . </email> <fone/> . . . </fone> <contato/> ... </agenda> Objetos Bancos de dados relacionais XML
  • 13. Parâmetros opcionais enomeadosPrincipais novidades da linguagem C# 4 public StreamReader OpenTextFile( string path, Método primário Encoding encoding, bool detectEncoding, int bufferSize); public StreamReader OpenTextFile( string path, Encoding encoding, Sobrecargas bool detectEncoding); secundárias public StreamReader OpenTextFile( string path, Chamadas ao método Encoding encoding); primário com valores padrão public StreamReader OpenTextFile( string path);
  • 14. Parâmetros opcionais enomeadosPrincipais novidades da linguagem C# 4 public StreamReader OpenTextFile( string path, Parâmetros opcionais Encoding encoding,= null, encoding bool detectEncoding,= true, detectEncoding int bufferSize); 1024); bufferSize = Argumentos nomeados OpenTextFile("foo.txt", Encoding.UTF8); OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096); Argumentos Argumentos Argumentos nomeados podem avaliados na ordem nomeados precisam aparecer em da escrita ser os últimos qualquer ordem Argumentos não OpenTextFile( opcionais devem ser bufferSize: 4096, path: "foo.txt", especificados detectEncoding: false);
  • 15. Interoperabilidade com COMPrincipais novidades da linguagem C# 4 object nomeArquivo = "Teste.docx"; object missing = System.Reflection.Missing.Value; doc.SaveAs(ref nomeArquivo, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); doc.SaveAs("Teste.docx"); Parâmetros nomeados e opcionais Modificador ref opcional
  • 16. Objetos com tipagem dinâmicaPrincipais novidades da linguagem C# 4 Calculadora calc = ObterCalculadora(); object calc = ObterCalculadora(); int soma = calc.Adicionar(10, 20); Type tipoCalc = calc.GetType(); object res = tipoCalc.InvokeMember("Adicionar", BindingFlags.InvokeMethod, null, new object[] { 10, 20 }); ScriptObject calc = ObterCalculadora(); int soma = Convert.ToInt32(res); res = calc.Invoke("Adicionar", 10, 20); object int soma = Convert.ToInt32(res); Tipado estaticamente dynamic calc = ObterCalculadora(); para ser dinâmico int sum = calc.Add(10, 20); Coversão Invocação dinâmica dinâmica do método
  • 17. Covariância e contravariânciaPrincipais novidades da linguagem C# 4 out = covariância public interface IEnumerable<T> T> IEnumerable<out somente posições de { IEnumerator<T> GetEnumerator(); saída } Pode ser tratada como menos específica public interface IEnumerator<T> T> IEnumerator<out { T Current { get; } IEnumerable<string> strings = ObterStrings(); bool MoveNext(); IEnumerable<object> objects = strings; } in = contravariância somente posições de public interface IComparer<T> T> IComparer<in entrada { int Compare(T x, T y); Pode ser tratada como } mais específica IComparer<object> objComp = ObterComparer(); IComparer<string> strComp = objComp;
  • 18. TAPPrincipais novidades da linguagem C# 5 Task-based Asynchronous Pattern Novo padrão de programação assíncrona no .NET Framework Baseado nos tipos Task e Task<TResult> do namespace System.Threading.Tasks Implementado por um único método NomeOperacaoAsync Deve retornar Task ou Task<TResult>, baseado no tipo de retorno void ou TResult, respectivamente, do método síncrono correspondente (NomeOperacao) Se a classe já tiver um método NomeOperacaoAsync, então deve-se usar NomeOperacaoTaskAsync
  • 19. Versão assíncrona via TAPPrincipais novidades da linguagem C# 5Versão síncrona de uma operaçãoTRetorno NomeOperacao(TParam1 p1, TParam2 p2);Versão assíncrona da operação síncrona segundoo padrão TAPTask<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2);Opcionais: cancelamento e progressoTask<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2 [, CancellationToken cancellationToken] Cancelamento [, IProgress<T> progress]); Progresso
  • 20. Funções assíncronasPrincipais novidades da linguagem C# 5 Tipos de retorno das funções assíncronas Deve ser void, Task ou Task<TResult> Avaliação de funções assíncronas Inicialmente idêntica a uma função síncrona Quando atinge uma expressão await, a função assíncrona deve retornar imediatamente ao seu chamador Se a função assíncrona não for void, um objeto Task ou Task<TResult> será retornado para o chamador
  • 21. Windows RuntimePrincipais novidades da linguagem C# 5 Windows Runtime Nova biblioteca da próxima versão do Windows projetada para ser usada com JavaScript, C#, Visual Basic e C++ Modelo de programação assíncrona Interface IAsyncOperation<T> O compilador automaticamente transforma código normal em uma máquina de estado de callback
  • 22. async e awaitPrincipais novidades da linguagem C# 5 O suporte a funções assíncronas será incorporado à linguagem C# 5 Novas palavras-chaves: async e await A palavra-chave await é usada para marcar chamadas assíncronas Dispensa a criação de funções de callback A palavra-chave async deve estar na assinatura de funções que fazem chamadas assíncronas await somente pode ser usada na chamada de funções com async na assinatura
  • 23. async e awaitPrincipais novidades da linguagem C# 5async Task<decimal> calcularVendasAsync(string arquivo){ using (TextReader leitor = new StreamReader(arquivo)) { string linha = null; decimal total = 0M; while ((linha = await leitor.ReadLineAsync()) != null) { string[] campos = linha.Split(;); total += decimal.Parse(campos[campos.Length - 1]); } return total; }}
  • 24. Explorando as novidades dalinguagem C# 5Rogério Moraes de CarvalhoVITA Informática
  • 25. Projeto RoslynCompilador como um serviço Tradicionalmente, compiladores são caixas pretas O projeto Roslyn muda este modelo Abertura dos compiladores Visual Basic e C# como APIs Modelos de objetos da linguagem para: Geração e análise de código Refatoração Suporte para scripting e interatividade com Visual Basic e C#
  • 26. Compiler-as-a-Service (CaaS)Principais novidades do projeto Roslyn Classe LaçoMeta-programação public Classe1 Ler-Avaliar-Imprimir Campo Modelo de objetos Incorporação de da linguagem private campo1 DSL (Domain string Specific Language) Código-fonte Assembly Código-fonte Assembly .NET Código-fonte Compilador Assembly .NET .NET
  • 27. APIs para o CaaS Principais novidades do projeto Roslyn Edit and Continue Go To Definition Extract Method Completion List Object Browser Signature Help Navigate To References Quick Info Formatter Outlining Colorizer Rename Find All Serviços dalinguagem APIs docompiladorPipeline do Symbolscompilador Binding and Syntax Symbol IL Emit Parser Binder Flow Analysis Tree API API Metadata Emitter API Import APIs
  • 28. Microsoft “Roslyn” CTPCommunity Technology Preview Microsoft “Roslyn” October 2011 CTP Liberado no dia 19 de outubro de 2011 Para ser instalado no Visual Studio 2010 SP1 Somente um subconjunto das linguagens Visual Basic e C# foram implementadas neste primeiro CTP Microsoft “Roslyn” no site da Microsoft http://msdn.microsoft.com/roslyn
  • 29. ResumoA linguagem C# está em evolução constante A evolução da linguagem C# C# 1.0 em fevereiro de 2002 (.NF 1.0) C# 2.0 em novembro de 2005 (.NF 2.0) C# 3.0 em novembro de 2007 (.NF 3.5) C# 4 em abril de 2010 (.NF 4) C# 5 em 2012 (.NF 4.5) Suporte ao Windows Runtime Facilidade na programação assíncrona Projeto Roslyn Compiler-as-a-Service (CaaS) Microsoft “Roslyn” October 2011 CTP (19/10/2011)