SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Atualizando suas habilidades
de programação com a
linguagem C# para ser um
desenvolvedor mais efetivo
DEV303



     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 a
linguagem C# 1.0

Rogério Moraes de Carvalho
VITA Informática
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

Rogério Moraes de Carvalho
VITA Informática
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
Explorando as novidades da
linguagem C# 3.0

Rogério Moraes de Carvalho
VITA Informática
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;
Explorando as novidades da
linguagem C# 4

Rogério Moraes de Carvalho
VITA Informática
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
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




                                                          Symbols                                        Binding and
Pipeline do         Syntax                                Symbol                                                                                                           IL
                                                                                                                                                                          Emit
                    Parser                                                                                  Binder
                                                                                                        Flow Analysis
compilador         Tree API                                 API
                                                          Metadata                                                                                                       Emitter
                                                                                                                                                                          API
                                                                Import
                                                                                                            APIs
Conclusão
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)
        Visual Studio Roslyn CTP
           Previsão: meados de outubro/2011
Conteúdo Relacionado
  Visual Studio Asynchronous Programming
  msdn.microsoft.com/vstudio/async


  What's New for Visual C# in
  Visual Studio 11 Developer Preview
  go.microsoft.com/fwlink/?LinkId=228087


  MSDN Webcast: C# 5 – Task-based
  Asynchronous Pattern (TAP), async e await
  https://msevents.microsoft.com/CUI/EventDetail.aspx?
  EventID=1032477469
Palestras Relacionadas
  DEV304 – C# e Visual Basic Future: Async
  Made Simple
  Giovanni Bassi (29/09 18:40 às 19:50)


  DEV310 – Visual Studio vNext a nova geração
  Brian Keller, Rodrigo de Carvalho (29/09 11:20 às 12:30)


  WEB302 – Presente e futuro da linguagem de
  programação JavaScript
  Rogério Moraes de Carvalho (29/09 18:40 às 19:50)
Get the free mobile app for your phone
http:/ / gettag.mobi



                                         http://technet.microsoft.com/pt-br




Get the free mobile app for your phone
http:/ / gettag.mobi


                                         http://msdn.microsoft.com/pt-br
Não esqueça de
preencher sua avaliação
        online
www.teched.com.br/avaliacao


              Get the free mobile app for your phone
              http:/ / gettag.mobi
© 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
  The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT
                                                 MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Mais conteúdo relacionado

Mais procurados

MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4 MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4 Rogério Moraes de Carvalho
 
Introduction to Delphi - June 2004
Introduction to Delphi - June 2004Introduction to Delphi - June 2004
Introduction to Delphi - June 2004Michel Alves
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem csergiocrespo
 
POO - Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)
POO -  Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)POO -  Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)
POO - Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)Marcello Thiry
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmerRegis Melo
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Introdução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOIntrodução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOJose Augusto Cintra
 

Mais procurados (20)

Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Compiladores 5
Compiladores 5Compiladores 5
Compiladores 5
 
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4 MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
 
Introduction to Delphi - June 2004
Introduction to Delphi - June 2004Introduction to Delphi - June 2004
Introduction to Delphi - June 2004
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
POO - Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)
POO -  Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)POO -  Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)
POO - Unidade 1 (complementar) - Introdução a Java e UML (versão draft 01)
 
Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmer
 
Semanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantesSemanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantes
 
Compiladores 7
Compiladores 7Compiladores 7
Compiladores 7
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Introdução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOIntrodução à Linguagem de Programação GO
Introdução à Linguagem de Programação GO
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 

Destaque

Espanhol Tutorial Inscricao Atualizado Com Personagens
Espanhol   Tutorial Inscricao Atualizado Com PersonagensEspanhol   Tutorial Inscricao Atualizado Com Personagens
Espanhol Tutorial Inscricao Atualizado Com PersonagensSONIA BERTOCCHI
 
Aceder, Criar e Partilhar Prudentemente
Aceder, Criar e Partilhar PrudentementeAceder, Criar e Partilhar Prudentemente
Aceder, Criar e Partilhar PrudentementeFernando Rui Campos
 
9. presentacion (actividades)
9. presentacion (actividades)9. presentacion (actividades)
9. presentacion (actividades)Rogério Almeida
 
How No Child Left Behind leaves all children behind
How No Child Left Behind leaves all children behindHow No Child Left Behind leaves all children behind
How No Child Left Behind leaves all children behindJohn Moravec
 
Antivirus apresentacao calhau
Antivirus apresentacao calhauAntivirus apresentacao calhau
Antivirus apresentacao calhauanocascalhau
 
Três de Maio - Kerly Jussana Backes
Três de Maio - Kerly Jussana BackesTrês de Maio - Kerly Jussana Backes
Três de Maio - Kerly Jussana BackesCursoTICs
 

Destaque (8)

Espanhol Tutorial Inscricao Atualizado Com Personagens
Espanhol   Tutorial Inscricao Atualizado Com PersonagensEspanhol   Tutorial Inscricao Atualizado Com Personagens
Espanhol Tutorial Inscricao Atualizado Com Personagens
 
Aceder, Criar e Partilhar Prudentemente
Aceder, Criar e Partilhar PrudentementeAceder, Criar e Partilhar Prudentemente
Aceder, Criar e Partilhar Prudentemente
 
EdRen - News from Portugal
EdRen - News from PortugalEdRen - News from Portugal
EdRen - News from Portugal
 
9. presentacion (actividades)
9. presentacion (actividades)9. presentacion (actividades)
9. presentacion (actividades)
 
How No Child Left Behind leaves all children behind
How No Child Left Behind leaves all children behindHow No Child Left Behind leaves all children behind
How No Child Left Behind leaves all children behind
 
Gurus Da Saude
Gurus Da SaudeGurus Da Saude
Gurus Da Saude
 
Antivirus apresentacao calhau
Antivirus apresentacao calhauAntivirus apresentacao calhau
Antivirus apresentacao calhau
 
Três de Maio - Kerly Jussana Backes
Três de Maio - Kerly Jussana BackesTrês de Maio - Kerly Jussana Backes
Três de Maio - Kerly Jussana Backes
 

Semelhante a Atualizando suas habilidades de programação com 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#Rogério Moraes de Carvalho
 
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
 
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
 
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
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETphilipsoares
 
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
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdfSecont
 
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
 
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
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrCampus Party Brasil
 
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
 
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 Atualizando suas habilidades de programação com C (20)

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#
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
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
 
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
 
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?
 
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
 
Ud2
Ud2Ud2
Ud2
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NET
 
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)
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdf
 
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
 
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
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
 
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...
 
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 ...
 
`
``
`
 

Atualizando suas habilidades de programação com C

  • 1.
  • 2. Atualizando suas habilidades de programação com a linguagem C# para ser um desenvolvedor mais efetivo DEV303 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. Explorando a linguagem C# 1.0 Rogério Moraes de Carvalho VITA Informática
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. Explorando as novidades da linguagem C# 2.0 Rogério Moraes de Carvalho VITA Informática
  • 14. 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
  • 15. 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
  • 16. Explorando as novidades da linguagem C# 3.0 Rogério Moraes de Carvalho VITA Informática
  • 17. 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);
  • 18. 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);
  • 19. 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
  • 20. 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
  • 21. 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;
  • 22. Explorando as novidades da linguagem C# 4 Rogério Moraes de Carvalho VITA Informática
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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; } }
  • 29. Explorando as novidades da linguagem C# 5 Rogério Moraes de Carvalho VITA Informática
  • 30. 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
  • 31. 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 Symbols Binding and Pipeline do Syntax Symbol IL Emit Parser Binder Flow Analysis compilador Tree API API Metadata Emitter API Import APIs
  • 32. Conclusão 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) Visual Studio Roslyn CTP Previsão: meados de outubro/2011
  • 33. Conteúdo Relacionado Visual Studio Asynchronous Programming msdn.microsoft.com/vstudio/async What's New for Visual C# in Visual Studio 11 Developer Preview go.microsoft.com/fwlink/?LinkId=228087 MSDN Webcast: C# 5 – Task-based Asynchronous Pattern (TAP), async e await https://msevents.microsoft.com/CUI/EventDetail.aspx? EventID=1032477469
  • 34. Palestras Relacionadas DEV304 – C# e Visual Basic Future: Async Made Simple Giovanni Bassi (29/09 18:40 às 19:50) DEV310 – Visual Studio vNext a nova geração Brian Keller, Rodrigo de Carvalho (29/09 11:20 às 12:30) WEB302 – Presente e futuro da linguagem de programação JavaScript Rogério Moraes de Carvalho (29/09 18:40 às 19:50)
  • 35. Get the free mobile app for your phone http:/ / gettag.mobi http://technet.microsoft.com/pt-br Get the free mobile app for your phone http:/ / gettag.mobi http://msdn.microsoft.com/pt-br
  • 36. Não esqueça de preencher sua avaliação online www.teched.com.br/avaliacao Get the free mobile app for your phone http:/ / gettag.mobi
  • 37. © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.