SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Evolução da linguagem
de programação C#


Rogério Moraes de Carvalho
VITA Informática
@rogeriomc
rogeriomc.wordpress.com
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, ...
Sistema de tipos
Linguagem 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
Memória e instruções
Linguagem 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
Herança e membros de classe
Linguagem C# 1.0

   Suporte a herança simples
   Membros possíveis em classes
     Constantes
     Campos
     Métodos
     Propriedades
     Eventos
     Operadores
     Indexadores
     Construtores
          Destrutores
Atributos e outros recursos
Linguagem 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
Generics e Iterators
Principais 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
Tipos parciais e anuláveis
Principais 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
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
Classes estáticas e mais
Principais 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
Principais inovações                                             Expressões de
Principais 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ão
Tipos 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
LINQ
Principais 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
Parâmetros opcionais e
nomeados
Principais 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);
Parâmetros opcionais e
nomeados
Principais 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);
Interoperabilidade com COM
Principais 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
Objetos com tipagem dinâmica
Principais 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
Covariância e contravariância
Principais 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;
TAP
Principais 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
Versão assíncrona via TAP
Principais novidades da linguagem C# 5
Versão síncrona de uma operação
TRetorno NomeOperacao(TParam1 p1, TParam2 p2);


Versão assíncrona da operação síncrona segundo
o padrão TAP
Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2);

Opcionais: cancelamento e progresso
Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2
                [, CancellationToken cancellationToken]
 Cancelamento
                [, IProgress<T> progress]);
   Progresso
Funções assíncronas
Principais 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
Windows Runtime
Principais 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
async e await
Principais 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
async e await
Principais novidades da linguagem C# 5
async 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;
    }
}
Explorando as novidades da
linguagem C# 5

Rogério Moraes de Carvalho
VITA Informática
Projeto Roslyn
Compilador 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#
Compiler-as-a-Service (CaaS)
Principais novidades do projeto Roslyn

                               Classe
                                                            Laço
Meta-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
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
    da
linguagem




 APIs do
compilador




Pipeline do                                               Symbols
compilador                                                                                               Binding and
                    Syntax                                Symbol                                                                                                           IL
                                                                                                                                                                          Emit
                    Parser                                                                                  Binder
                                                                                                        Flow Analysis
                   Tree API                                 API
                                                          Metadata                                                                                                       Emitter
                                                                                                                                                                          API
                                                                Import
                                                                                                            APIs
Microsoft “Roslyn” CTP
Community 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
Resumo
A 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)

Contenu connexe

Tendances (16)

Compiladores 5
Compiladores 5Compiladores 5
Compiladores 5
 
Ficha javacc
Ficha javaccFicha javacc
Ficha javacc
 
Aula05
Aula05Aula05
Aula05
 
Oz
OzOz
Oz
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NET
 
Ficheiros em JAVA
Ficheiros em JAVAFicheiros em JAVA
Ficheiros em JAVA
 
Curso completo php
Curso completo phpCurso completo php
Curso completo php
 
Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10
 
Módulo de php
Módulo de phpMódulo de php
Módulo de php
 
Java 15
Java 15Java 15
Java 15
 
TDC2014 SP - C/C++ - Modularização de Código C
TDC2014 SP - C/C++ - Modularização de Código CTDC2014 SP - C/C++ - Modularização de Código C
TDC2014 SP - C/C++ - Modularização de Código C
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NET
 
java.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosjava.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivos
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 

En vedette

TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...Rogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebRogério Moraes de Carvalho
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...Rogério Moraes de Carvalho
 
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...Rogério Moraes de Carvalho
 
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e awaitMSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e awaitRogério Moraes de Carvalho
 
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
Uma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoUma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoRogério Moraes de Carvalho
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...Rogério Moraes de Carvalho
 
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5Rogério Moraes de Carvalho
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Rogério Moraes de Carvalho
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...Rogério Moraes de Carvalho
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Rogério Moraes de Carvalho
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF CoreRogério Moraes de Carvalho
 
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveisSeminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveisRogério Moraes de Carvalho
 

En vedette (20)

Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)
 
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões Web
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
 
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
 
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e awaitMSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
 
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
Uma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoUma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programação
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
 
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
 
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveisSeminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
Seminfo 2012 (Urutaí-GO): Desenvolvimento para dispositivos móveis
 

Similaire à Evolução da linguagem C# desde sua criação

Linguagem Python
Linguagem PythonLinguagem Python
Linguagem PythonNatã Melo
 
Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Felipe Borges
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2Moises de Paula
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)Mario Sergio
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Marcelo Barros de Almeida
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05t34m0nana
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrCampus Party Brasil
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdfSecont
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Elaine Naomi
 
Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1D M
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 

Similaire à Evolução da linguagem C# desde sua criação (20)

Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2
 
Linguagem de programação C# 4 e 5
Linguagem de programação C# 4 e 5Linguagem de programação C# 4 e 5
Linguagem de programação C# 4 e 5
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05
 
Introducao ao .Net
Introducao ao .NetIntroducao ao .Net
Introducao ao .Net
 
Ud2
Ud2Ud2
Ud2
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdf
 
C# 4.0
C# 4.0C# 4.0
C# 4.0
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Tutorial Python - 1
Tutorial Python - 1Tutorial Python - 1
Tutorial Python - 1
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 

Plus de Rogério Moraes de Carvalho

TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaRogério Moraes de Carvalho
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoreRogério Moraes de Carvalho
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroRogério Moraes de Carvalho
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework CoreRogério Moraes de Carvalho
 
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemRogério Moraes de Carvalho
 
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7Rogério Moraes de Carvalho
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Rogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realRogério Moraes de Carvalho
 
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#Rogério Moraes de Carvalho
 

Plus de Rogério Moraes de Carvalho (14)

Docker com ASP.NET Core e Hospedagem no Azure
Docker com ASP.NET Core e Hospedagem no AzureDocker com ASP.NET Core e Hospedagem no Azure
Docker com ASP.NET Core e Hospedagem no Azure
 
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
 
Tecnologias XML e XML no SQL Server 2016
Tecnologias XML eXML no SQL Server 2016Tecnologias XML eXML no SQL Server 2016
Tecnologias XML e XML no SQL Server 2016
 
Cebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET CoreCebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET Core
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
 
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
 
Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016
 
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
 
`
``
`
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo real
 
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
 

Evolução da linguagem C# desde sua criação

  • 1.
  • 2. Evolução da linguagem de programação C# Rogério Moraes de Carvalho VITA Informática @rogeriomc rogeriomc.wordpress.com
  • 3. 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, ...
  • 4. Sistema de tipos Linguagem 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
  • 5. Memória e instruções Linguagem 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
  • 6. Herança e membros de classe Linguagem C# 1.0 Suporte a herança simples Membros possíveis em classes Constantes Campos Métodos Propriedades Eventos Operadores Indexadores Construtores Destrutores
  • 7. Atributos e outros recursos Linguagem 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
  • 8. Generics e Iterators Principais 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. Tipos parciais e anuláveis Principais 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. 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. Classes estáticas e mais Principais 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. Principais inovações Expressões de Principais 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ão Tipos 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
  • 13. LINQ Principais 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
  • 14. Parâmetros opcionais e nomeados Principais 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);
  • 15. Parâmetros opcionais e nomeados Principais 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);
  • 16. Interoperabilidade com COM Principais 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
  • 17. Objetos com tipagem dinâmica Principais 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
  • 18. Covariância e contravariância Principais 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;
  • 19. TAP Principais 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
  • 20. Versão assíncrona via TAP Principais novidades da linguagem C# 5 Versão síncrona de uma operação TRetorno NomeOperacao(TParam1 p1, TParam2 p2); Versão assíncrona da operação síncrona segundo o padrão TAP Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2); Opcionais: cancelamento e progresso Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2 [, CancellationToken cancellationToken] Cancelamento [, IProgress<T> progress]); Progresso
  • 21. Funções assíncronas Principais 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
  • 22. Windows Runtime Principais 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
  • 23. async e await Principais 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
  • 24. async e await Principais novidades da linguagem C# 5 async 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; } }
  • 25. Explorando as novidades da linguagem C# 5 Rogério Moraes de Carvalho VITA Informática
  • 26. Projeto Roslyn Compilador 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#
  • 27. Compiler-as-a-Service (CaaS) Principais novidades do projeto Roslyn Classe Laço Meta-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
  • 28. 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 da linguagem APIs do compilador Pipeline do Symbols compilador Binding and Syntax Symbol IL Emit Parser Binder Flow Analysis Tree API API Metadata Emitter API Import APIs
  • 29. Microsoft “Roslyn” CTP Community 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
  • 30. Resumo A 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)