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 ti...
Memória e instruçõesLinguagem C# 1.0 Gerenciamento automático de memória   Coletor de lixo (Garbage Collector) Instruçõ...
Herança e membros de classeLinguagem C# 1.0 Suporte a herança simples Membros possíveis em classes   Constantes   Camp...
Atributos e outros recursosLinguagem C# 1.0 Atributos   Elementos que permitem fazer anotações    de forma declarativa ...
Explorando os recursos dalinguagem C# 1.0
Generics e IteratorsPrincipais novidades da linguagem C# 2.0 Generics   Os tipos genéricos permitem um alto nível    de ...
Tipos parciais e anuláveisPrincipais novidades da linguagem C# 2.0 Tipos parciais   As definições de classes, estruturas...
Métodos anônimos e ::Principais novidades da linguagem C# 2.0 Métodos anônimos   Tornam possível a passagem de um bloco ...
Classes estáticas e maisPrincipais novidades da linguagem C# 2.0 Classes estáticas   Modo seguro e conveniente de declar...
Explorando as novidades dalinguagem C# 2.0
Principais inovações                             Expressões dePrincipais novidades da linguagem C# 3.0           consulta ...
LINQPrincipais novidades da linguagem C# 3.0      C# 3.0                  VB 9.0            Outras linguagens…         .NE...
Explorando as novidades dalinguagem C# 3.0
Parâmetros opcionais e nomeadosPrincipais novidades da linguagem C# 4  public StreamReader OpenTextFile(      string path,...
Parâmetros opcionais e nomeadosPrincipais novidades da linguagem C# 4  public StreamReader OpenTextFile(      string path,...
Interoperabilidade com COMPrincipais novidades da linguagem C# 4      object nomeArquivo = "Teste.docx";      object missi...
Objetos com tipagem dinâmicaPrincipais novidades da linguagem C# 4 Calculadora calc = ObterCalculadora(); int soma = calc....
Covariância e contravariânciaPrincipais novidades da linguagem C# 4                                              out = cov...
Explorando as novidades dalinguagem C# 4
TAPPrincipais novidades da linguagem C# 5 Task-based Asynchronous Pattern   Novo padrão de programação assíncrona    no ...
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, T...
Windows RuntimePrincipais novidades da linguagem C# 5 Windows Runtime   Nova biblioteca da próxima versão do    Windows ...
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# 5
Compiler-as-a-Service (CaaS)Principais novidades do projeto Roslyn                                Classe                  ...
APIs para o CaaS Principais novidades do projeto Roslyn                                                                   ...
Considerações finaisA linguagem C# está em evolução constante A evolução da linguagem C#   C# 1.0 em fevereiro de 2002 (...
Próximos SlideShares
Carregando em…5
×

TDC 2011 Goiânia: Evolução da linguagem de programação C#

1.778 visualizações

Publicada em

Na palestra foram apresentados os principais recursos introduzidos na linguagem C# durante a sua evolução desde a versão 1.0 (fev 2002) até a versão 4 (mar 2010) e o que esperar da versão 5 (2012). Também foram apresentadas informações sobre o que está sendo planejado para a linguagem C# após 2012 com o projeto Roslyn.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.778
No SlideShare
0
A partir de incorporações
0
Número de incorporações
675
Ações
Compartilhamentos
0
Downloads
25
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

TDC 2011 Goiânia: Evolução da linguagem de programação C#

  1. 1. 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. Explorando os recursos dalinguagem C# 1.0
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. 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
  12. 12. Explorando as novidades dalinguagem C# 2.0
  13. 13. 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 };Tipos implícitos em variáveis Expressões locais lambda Árvores de var mulheres = expressão contatos .Where(c => c.Sexo == Sexo.Feminino) Propriedades .Select(c => new {c.Nome, c.Email}); automáticas Métodos de Tipos Iniciadores de Métodos extensão anônimos objetos parciais Iniciadores de coleções
  14. 14. 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> Bancos de dados Objetos relacionais XML
  15. 15. Explorando as novidades dalinguagem C# 3.0
  16. 16. Parâmetros opcionais e nomeadosPrincipais novidades da linguagem C# 4 public StreamReader OpenTextFile( string path, Encoding encoding, Método primário bool detectEncoding, int bufferSize); public StreamReader OpenTextFile( string path, Encoding encoding, Sobrecargas bool detectEncoding); secundárias public StreamReader OpenTextFile( string path, Chamadas ao Encoding encoding); método primário com valores padrão public StreamReader OpenTextFile( string path);
  17. 17. Parâmetros opcionais e nomeadosPrincipais 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 nomeadosOpenTextFile("foo.txt", Encoding.UTF8);OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096); Argumentos Argumentos Argumentosnomeados podem avaliados na ordem nomeados precisam aparecer em da escrita ser os últimos qualquer ordem OpenTextFile( Argumentos não bufferSize: 4096, path: "foo.txt", opcionais devem ser detectEncoding: false); especificados
  18. 18. 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
  19. 19. Objetos com tipagem dinâmicaPrincipais novidades da linguagem C# 4 Calculadora calc = ObterCalculadora(); int soma = calc.Adicionar(10, 20); object calc = ObterCalculadora(); Type tipoCalc = calc.GetType(); object res = ScriptObject calc = ObterCalculadora(); tipoCalc.InvokeMember("Adicionar", object res = calc.Invoke("Adicionar", 10, 20); BindingFlags.InvokeMethod, null, int soma = Convert.ToInt32(res); new object[] { 10, 20 }); 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
  20. 20. 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 public interface IEnumerator<T> T> IEnumerator<out específica { T Current { get; } IEnumerable<string> str = ObterStrings(); bool MoveNext(); IEnumerable<object> obj = str; } 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;
  21. 21. Explorando as novidades dalinguagem C# 4
  22. 22. 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
  23. 23. 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íncronasegundo o 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
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. 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; }}
  28. 28. Explorando as novidades dalinguagem C# 5
  29. 29. 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 Compilador Assembly .NET Código-fonte Assembly .NET .NET
  30. 30. 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 Serviços Rename Find All dalinguagem APIs docompilador Symbols Binding andPipeline do Syntax Symbol IL Emit Parser Binder Flow Analysiscompilador Tree API API Metadata Emitter API Import APIs
  31. 31. Considerações finaisA linguagem C# está em evolução constante A evolução da linguagem C#  C# 1.0 em fevereiro de 2002 (.NET 1.0)  C# 2.0 em novembro de 2005 (.NET 2.0)  C# 3.0 em novembro de 2007 (.NET 3.5)  C# 4 em abril de 2010 (.NET 4)  C# 5 em 2012 (.NET 4.5)  Suporte ao Windows Runtime  Facilidade na programação assíncrona  Projeto Roslyn  Compiler-as-a-Service (CaaS)  Visual Studio Roslyn CTP  Previsão: meados de outubro/2011

×