SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
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
Explorando os recursos da
linguagem C# 1.0
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
Explorando as novidades da
linguagem C# 2.0
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 };
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
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>
                          Bancos de dados
  Objetos                   relacionais                         XML
Explorando as novidades da
linguagem C# 3.0
Parâmetros opcionais e nomeados
Principais 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);
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
      OpenTextFile(
                                          Argumentos não
          bufferSize: 4096,
          path: "foo.txt",
                                        opcionais devem ser
          detectEncoding: false);          especificados
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();
 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
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
  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;
Explorando as novidades da
linguagem C# 4
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
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         Compilador                           Assembly
                                                                .NET
     Código-fonte                                              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
 Serviços




                                                                                                                 Rename
                                                                                                     Find All
    da
linguagem




 APIs do
compilador




                                                          Symbols                                        Binding and
Pipeline do         Syntax                                Symbol                                                                                                           IL
                                                                                                                                                                          Emit
                    Parser                                                                                  Binder
                                                                                                        Flow Analysis
compilador         Tree API                                 API
                                                          Metadata                                                                                                       Emitter
                                                                                                                                                                          API
                                                                Import
                                                                                                            APIs
Considerações finais
A 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

Mais conteúdo relacionado

Mais procurados

Mais procurados (19)

Unidade04
Unidade04Unidade04
Unidade04
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Compiladores 3
Compiladores 3Compiladores 3
Compiladores 3
 
Amarração e escopo
Amarração e escopoAmarração e escopo
Amarração e escopo
 
Compiladores 5
Compiladores 5Compiladores 5
Compiladores 5
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NET
 
Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Java 07
Java 07Java 07
Java 07
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
Seminario haskell
Seminario haskellSeminario haskell
Seminario haskell
 
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
 
Estruturas de Dados em C#
Estruturas de Dados em C#Estruturas de Dados em C#
Estruturas de Dados em C#
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 

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

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
 
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
 
TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#Rogério Moraes de Carvalho
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem PythonNatã Melo
 
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
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)Mario Sergio
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
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
 
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
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
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
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrCampus Party Brasil
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05t34m0nana
 

Semelhante a Evolução da linguagem C# desde sua criação (20)

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...
 
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#
 
TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd 2011 Review - Evolução da linguagem de programação C#
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
C# 4.0
C# 4.0C# 4.0
C# 4.0
 
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
 
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)
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Java2
Java2Java2
Java2
 
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
 
Introducao ao .Net
Introducao ao .NetIntroducao ao .Net
Introducao ao .Net
 
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
 
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)
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
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...
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05
 

Mais 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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 

Mais de Rogério Moraes de Carvalho (20)

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
 
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
 
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
 
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 ...
 
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 ...
 
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
 
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”
 
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...
 
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...
 
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 ...
 
`
``
`
 

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

  • 1. Rogério Moraes de Carvalho VITA Informática @rogeriomc rogeriomc.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 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. Explorando os recursos da linguagem C# 1.0
  • 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. Explorando as novidades da linguagem C# 2.0
  • 13. 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 }; 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. 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> Bancos de dados Objetos relacionais XML
  • 15. Explorando as novidades da linguagem C# 3.0
  • 16. Parâmetros opcionais e nomeados Principais 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. 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 OpenTextFile( Argumentos não bufferSize: 4096, path: "foo.txt", opcionais devem ser detectEncoding: false); especificados
  • 18. 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
  • 19. Objetos com tipagem dinâmica Principais 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. 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 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. Explorando as novidades da linguagem C# 4
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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; } }
  • 28. Explorando as novidades da linguagem C# 5
  • 29. 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 Compilador Assembly .NET Código-fonte Assembly .NET .NET
  • 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 da linguagem APIs do compilador Symbols Binding and Pipeline do Syntax Symbol IL Emit Parser Binder Flow Analysis compilador Tree API API Metadata Emitter API Import APIs
  • 31. Considerações finais A 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