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.

TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com a linguagem C# para ser um desenvolvedor mais efetivo

  • 2.
    Atualizando suas habilidades deprogramaçã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 dalinguagem 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 LinguagemC# 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 LinguagemC# 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 membrosde 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 outrosrecursos 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 Principaisnovidades 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 eanulá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 emais 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 novidadesda 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 dalinguagem 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 novidadesda linguagem C# 3.0 Rogério Moraes de Carvalho VITA Informática
  • 17.
    Parâmetros opcionais e nomeados Principaisnovidades 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 Principaisnovidades 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 Principaisnovidades 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 tipagemdinâ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 Principaisnovidades 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 novidadesda linguagem C# 4 Rogério Moraes de Carvalho VITA Informática
  • 23.
    TAP Principais novidades dalinguagem 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 viaTAP 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 novidadesda 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 novidadesda 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 Principaisnovidades 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 Principaisnovidades 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 novidadesda linguagem C# 5 Rogério Moraes de Carvalho VITA Informática
  • 30.
    Compiler-as-a-Service (CaaS) Principais novidadesdo 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 oCaaS 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 freemobile 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 preenchersua avaliação online www.teched.com.br/avaliacao Get the free mobile app for your phone http:/ / gettag.mobi
  • 37.
    © 2011 MicrosoftCorporation. 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.