Evolução da linguagemde programação C#Rogério Moraes de CarvalhoVITA Informática@rogeriomcrogeriomc.wordpress.com
A evolução da linguagem C#Evolução                           C# 6?         Projeto Roslyn                                 ...
Sistema de tiposLinguagem C# 1.0   Suporte a duas categorias de tipos     Tipos por valor        Estruturas (incluindo os ...
Memória e instruçõesLinguagem C# 1.0   Gerenciamento automático de   memória     Coletor de lixo (Garbage Collector)   Ins...
Herança e membros de classeLinguagem C# 1.0   Suporte a herança simples   Membros possíveis em classes     Constantes     ...
Atributos e outros recursosLinguagem C# 1.0   Atributos     Elementos que permitem fazer     anotações de forma declarativ...
Generics e IteratorsPrincipais novidades da linguagem C# 2.0   Generics      Os tipos genéricos permitem um alto      níve...
Tipos parciais e anuláveisPrincipais novidades da linguagem C# 2.0   Tipos parciais      As definições de classes, estrutu...
Métodos anônimos e ::Principais novidades da linguagem C# 2.0   Métodos anônimos      Tornam possível a passagem de um    ...
Classes estáticas e maisPrincipais novidades da linguagem C# 2.0   Classes estáticas      Modo seguro e conveniente de dec...
Principais inovações                                             Expressões dePrincipais novidades da linguagem C# 3.0    ...
LINQPrincipais novidades da linguagem C# 3.0      C# 3.0                 VB 9.0             Outras linguagens…         .NE...
Parâmetros opcionais enomeadosPrincipais novidades da linguagem C# 4  public StreamReader OpenTextFile(      string path, ...
Parâmetros opcionais enomeadosPrincipais novidades da linguagem C# 4 public StreamReader OpenTextFile(     string path,   ...
Interoperabilidade com COMPrincipais novidades da linguagem C# 4     object nomeArquivo = "Teste.docx";     object missing...
Objetos com tipagem dinâmicaPrincipais novidades da linguagem C# 4                                    Calculadora calc = O...
Covariância e contravariânciaPrincipais novidades da linguagem C# 4                                               out = co...
TAPPrincipais novidades da linguagem C# 5   Task-based Asynchronous Pattern      Novo padrão de programação      assíncron...
Versão assíncrona via TAPPrincipais novidades da linguagem C# 5Versão síncrona de uma operaçãoTRetorno NomeOperacao(TParam...
Funções assíncronasPrincipais novidades da linguagem C# 5   Tipos de retorno das funções   assíncronas      Deve ser void,...
Windows RuntimePrincipais novidades da linguagem C# 5   Windows Runtime      Nova biblioteca da próxima versão do      Win...
async e awaitPrincipais novidades da linguagem C# 5   O suporte a funções assíncronas   será incorporado à linguagem C# 5 ...
async e awaitPrincipais novidades da linguagem C# 5async Task<decimal> calcularVendasAsync(string arquivo){  using (TextRe...
Explorando as novidades dalinguagem C# 5Rogério Moraes de CarvalhoVITA Informática
Projeto RoslynCompilador como um serviço   Tradicionalmente, compiladores são   caixas pretas   O projeto Roslyn muda este...
Compiler-as-a-Service (CaaS)Principais novidades do projeto Roslyn                               Classe                   ...
APIs para o CaaS Principais novidades do projeto Roslyn                                                                   ...
Microsoft “Roslyn” CTPCommunity Technology Preview  Microsoft “Roslyn” October 2011 CTP     Liberado no dia 19 de outubro ...
ResumoA linguagem C# está em evolução constante   A evolução da linguagem C#     C# 1.0 em fevereiro de 2002 (.NF 1.0)    ...
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
Upcoming SlideShare
Loading in …5
×

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

638 views
555 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
638
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Evolução da linguagemde programação C#Rogério Moraes de CarvalhoVITA Informática@rogeriomcrogeriomc.wordpress.com
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 24. Explorando as novidades dalinguagem C# 5Rogério Moraes de CarvalhoVITA Informática
  25. 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. 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. 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. 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. 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)

×