SlideShare une entreprise Scribd logo
1  sur  40
Plataforma Java x Plataforma .NET
                           Edição SP 2010

                  Tema 2
         Linguagem de programação




 Linguagem de programação C# 4
Novidades da próxima versão: C# 5


         Rogério Moraes de Carvalho
            Twitter: @rogeriomc
             rogeriom@gmx.net
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 A evolução da linguagem C#
                                                 C# 1.0: A linguagem
                                                 C# 1.0: Tipos por valor e por referência
                                                 C# 1.0: Arrays
                                                 C# 1.0: Sistema unificado de tipos
                                                 C# 1.0: Gerenciamento de memória
                                                 C# 1.0: Classes e seus membros
                                                 C# 1.0: Acessibilidade de membros
                                                 C# 1.0: Exemplo de membros
                                                 C# 1.0: Estrutura

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   2
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 C# 1.0: Estruturas versus classes
                                                 C# 1.0: Interfaces
                                                 C# 1.0: Herança e polimorfismo
                                                 C# 1.0: Enumerações
                                                 C# 1.0: Delegates
                                                 C# 2.0: Generics, Iterators, ...
                                                 C# 2.0: Métodos anônimos, ...
                                                 C# 2.0: Classes estáticas, ...
                                                 C# 3.0: Novidades
                                                 C# 3.0: Objetivos do projeto

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   3
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 C# 3.0: LINQ
                                                 C# 3.0: Expressões de consulta
                                                 C# 3.0: Expressões de consulta
                                                 C# 3.0: Inovações na linguagem
                                                 C# 4: Inovações
                                                 C# 4: Objetos tipados dinamicamente
                                                 C# 4: Parâmetros opcionais e nomeados
                                                 C# 4: Interoperabilidade com COM
                                                 C# 4: Covariância e contravariância
                                                 Demonstração

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   4
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 C# 5: Compilador como um serviço
                                                 Conclusão
                                                 Referências




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   5
Edição SP 2010
Plataforma Java x Plataforma .NET           A evolução da linguagem C#
                                                                        C# 5                 Compilador como um serviço
                                                                    (? 2012/2013)

                                                                                      Objetos tipados dinamicamente,
                                                                  C# 4                parâmetros opcionais e nomeados,
                                                                (Abr 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, tipos anuláveis,
                                                   C# 2.0              classes estáticas, métodos anônimos, ...
                                                   (Nov 2005)

                                                                 Código gerenciado, linguagem de POO, suporte nativo a
                                            C# 1.0               propriedades e eventos, documentação XML, exceções,
                                            (Fev 2002)           segurança de tipos, delegates, sobrecarga de operadores, ...

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)       6
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: A linguagem
                                             C#      (C Sharp)
                                                 Linguagem de     programação simples, moderna, orientada a
                                                    objetos e de tipos de seguros
                                             “Olá,         mundo!” em C#
                                                   using System;

                                                   class OlaMundo
                                                   {
                                                      static void Main() {
                                                         Console.WriteLine("Olá, mundo!");
                                                      }
                                                   }




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   7
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Tipos por valor e por referência
                                             C#      suporta duas classificações de tipos
                                                 Tipos       por valor (value types)
                                                       Tipos enumerações                 enum Cor { Vemelho, Verde, Azul }
                                                       Tipos estruturas                  struct Ponto { ... }
                                                         Algumas estruturas pré-definidas: bool, char, int, double, ...
                                                 Tipos       por referência (reference types)
                                                       Tipos classes                     class Pessoa { ... }
                                                       Tipos interfaces                  interface IConexao { ... }
                                                       Tipos delegates                   delegate void Acao();
                                                       Tipos arrays                      int[] primos = { 2, 3, 5, 7, 11 }




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)     8
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Arrays
                                             O que           é um array?
                                                 É uma estrutura de  dados que contém um número fixo
                                                    de variáveis chamadas de elementos do array
                                                       Os elementos do array são acessados por índices iniciados em zero
                                             Tipos         de arrays
                                                 Unidimensionais                                                 int[] arr = new int[5];

                                                 Multidimensionais
                                                       Retangulares                                       Irregulares
                                                         int[,] a2;                                     int[][] j2;
                                                         int[,,] a3;                                    int[][][] j3;




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                   9
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Sistema unificado de tipos
                                             O C#         fornece um sistema de tipos unificado
                                                 Todos os tipos, incluindo tipos por valor, derivam do tipo
                                                  object (System.Object)
                                                 É possível chamar métodos da classe object em qualquer
                                                  valor, mesmo em valores de tipos “primitivos” como int
                                                 Ao armazenar um tipo por valor numa variável do tipo
                                                  object, ocorre um processo denominado boxing
                                                     using System;                                           class Boxing
                                                                                                             {
                                                     class IntParaString                                        static void Main() {
                                                     {                                                             int i = 123;
                                                        static void Main() {                                       // Boxing
                                                           Console.WriteLine(                                      object o = i;
                                                              3.ToString("C")                                      // Unboxing
                                                           );                                                      int j = (int)o;
                                                        }                                                       }
                                                     }                                                       }
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)              10
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Gerenciamento de memória
                                             Gerenciamento                       manual de memória
                                                 Requer que    o desenvolvedor gerencie a alocação e
                                                    liberação de blocos de memória
                                                       Tarefa repetitiva e sujeita a erros
                                             Gerenciamento                       automático de memória
                                                 Usado pelo  C# para livrar os desenvolvedores da tarefa
                                                  cansativa de gerenciar a memória
                                                 O serviço do CLR (Common Language Runtime) responsável
                                                  pela liberação da memória usada por objetos é
                                                  denominado coletor de lixo (garbage collector)
                                                 Um objeto se torna elegível a ser coletado pelo coletor de
                                                  lixo quando não há a possibilidade de nenhum código
                                                  acessá-lo
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   11
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Classes e seus membros
                                             Classes                                                    Membros           de classes
                                                 Definem novos                 tipos por                    Classes podem     ter os
                                                  referência                                                    seguintes tipos de
                                                 Uma classe pode herdar                                        membros
                                                  de outra classe                                                  Constantes
                                                       Herança simples (de uma                                    Campos
                                                        única classe)                                              Propriedades
                                                 Uma classe pode                                                  Indexadores (indexers)
                                                    implementar múltiplas                                          Métodos
                                                    interfaces                                                     Eventos
                                                                                                                   Operadores
                                                                                                                   Construtores
                                                                                                                   Destrutores
                                                                                                                   Tipos aninhados

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                    12
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Acessibilidade de membros
                                             Acessibilidade                   de membros de classes
                                                 Cada membro tem uma acessibilidade associada
                                                       Controla as regiões de texto de programa que estão habilitadas a
                                                        acessar o membro
                                                         Modificador
                                                                                Acessibilidade
                                                         de acesso
                                                         public                 Acesso ilimitado
                                                                                Acesso limitado ao tipo contêiner ou tipos
                                                         protected
                                                                                derivados deste tipo
                                                         internal               Acesso limitado ao assembly
                                                                                Acesso limitado ao tipo contêiner ou tipos
                                                         protected
                                                                                derivados deste tipo ou ao assembly
                                                         internal
                                                                                (protected + internal)
                                                         private                Acesso limitado ao tipo contêiner


                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)    13
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Exemplo de membros
                                             Classe          com cada um dos tipos de membros
                                                 class Classe {
                                                    public const int Constante = 12;
                                                    private int campo;
                                                    private static int campoEstatico = 34;
                                                    public void MetodoSemParametroNemRetorno() { ... }
                                                    public string MetodoComParametroComRetorno(double d) { ... }
                                                    public int Propriedade {
                                                       get{ return campo; }
                                                       set { campo = value; }
                                                    }
                                                    public int PropriedadeSomenteLeitura { get{ ... } }
                                                    public event EventHandler Evento;
                                                    public int this[int index] { get { ... } set { ... } }
                                                    public static Classe operator +(Classe a, Classe b) { ... }
                                                    public Classe() { ... }
                                                    public Classe(int valor) { ... }
                                                    static Classe() { ... }
                                                    ~Classe() { ... }
                                                    class ClasseAninhada { ... }
                                                 }
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   14
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Estrutura
                                             Conceito              de estrutura
                                                 É um tipo   por valor que, com algumas exceções, permite a
                                                    definição dos mesmos tipos de membros que as classes
                                                       Uma vez que não é um tipo por referência, o valor de uma estrutura
                                                        é armazenada na memória “stack” (“in-line”)
                                                       Deste modo, a liberação do valor de uma estrutura não é realizada
                                                        pelo coletor de lixo (garbage collector)
                                                         Por este motivo, uma estrutura não suporta o membro destrutor
                                                       Estruturas podem implementar interfaces, mas não suportam
                                                        herança
                                             Quando              usar estruturas ao invés de classes?
                                                 Geralmente, estruturas devem                              ser utilizadas em tipos que
                                                    armazenam poucos dados
                                                       Recomenda-se usar estruturas com, no máximo, 16 bytes (128 bits)

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                 15
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Estruturas versus classes
                                             Exemplo    da declaração de uma estrutura versus a
                                                declaração de uma classe
                                                 struct Ponto {                                          class Ponto {
                                                    private int x, y;                                       private int x, y;

                                                      public int X {                                          public int X {
                                                         get { return x; }                                       get { return x; }
                                                         set { x = value; }                                      set { x = value; }
                                                      }                                                       }

                                                      public int Y {                                          public int Y {
                                                         get { return y; }                                       get { return y; }
                                                         set { y = value; }                                      set { y = value; }
                                                      }                                                       }

                                                      public Ponto(int x, int y) {                            public Ponto(int x, int y) {
                                                         this.x = x;                                             this.x = x;
                                                         this.y = y;                                             this.y = y;
                                                      }                                                       }
                                                 }                                                       }

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                    16
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Interfaces
                                             Conceito              de interface
                                                 Uma interface define                     um contrato
                                                       Classes e estruturas podem implementar múltiplas interfaces
                                             Características de                      uma interface
                                                 Interfaces podem                   ter os seguintes membros
                                                       Métodos, propriedades, eventos e indexers
                                             Exemplo              da declaração de uma interface
                                                 using System;

                                                 interface IInterface
                                                 {
                                                    string this[int indice] { get; set; }
                                                    event EventHandler Evento;
                                                    void Metodo(int valor);
                                                    string Propriedade { get; set; }
                                                 }
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   17
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Herança e polimorfismo
                                             Classes           abstratas
                                                 Classes definidas                para serem classes bases de outras classes
                                                     abstract class ClasseAbstrata { ... }

                                             Membros                virtuais (palavra-chave virtual)
                                                 Permite que um membro seja sobrescrito na classe                          derivada
                                                       Métodos, propriedades, indexadores e eventos podem ser virtuais
                                                          using System;

                                                          class Classe {
                                                             public virtual            void MetodoPolimorfico { ... }
                                                             public virtual            int PropriedadePolimorfica { get; set; }
                                                             public virtual            Classe this[int indice] { get; set; }
                                                             public virtual            event EventHandler EventoPolimorfico;
                                                          }
                                                       Por padrão, membros não virtuais de uma classe não são
                                                        polimórficos
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)          18
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Enumerações
                                             Conceito              de enumeração
                                                 É um tipo   por valor que herda da classe System.Enum e
                                                    fornece nomes para substituir os valores de um tipo
                                                    primitivo base
                                             Restrições               de uma enumeração
                                                 Em C#, uma enumeração não                               pode:
                                                       definir seus próprios métodos, propriedades ou eventos
                                                       implementar interfaces
                                             Exemplo              da declaração de uma enumeração
                                                 enum FormaPagamento {
                                                    Dinheiro,
                                                    Cheque,
                                                    BoletoBancario,
                                                    CartaoCredito
                                                 }

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   19
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 1.0: Delegates
                                             O que           é um delegate?
                                                 Um tipo por referência usado para referenciar um método
                                                    com uma assinatura compatível
                                                       Similar a ponteiro de função em C++, mas é um tipo seguro
                                                       Delegates são usados por manipuladores de eventos e métodos de
                                                        retorno (callback)
                                             Exemplos               de declarações de delegates
                                                 using System;

                                                 delegate void Acao();

                                                 delegate void EventHandler(object sender, EventArgs e);




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   20
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 2.0: Generics, Iterators, ...
                                             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 avançado 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
                                                 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
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                    21
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 2.0: Métodos anônimos, ...
                                             Tipos         anuláveis
                                                 Permitem que     uma variável de tipo por valor contenha um
                                                    valor indefinido
                                                       Úteis ao se trabalhar com bancos de dados ou outras estruturas
                                             Métodos               anônimos
                                                 Torna  possível a passagem de um bloco de código como um
                                                    parâmetro
                                                       Em qualquer lugar que um delegate é esperado, um bloco de código
                                                        pode ser passado
                                                         Não há a necessidade da definição de um novo método
                                             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

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   22
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 2.0: Classes estáticas, ...
                                             Classes           estáticas
                                                 Fornece um modo seguro e      conveniente de declarar uma
                                                    classe que não pode ser instanciada e contém somente
                                                    métodos estáticos
                                                       Anteriormente era necessário definir o construtor default da classe
                                                        como privado para não permitir que a mesma fosse instanciada
                                             Acessores               de uma propriedade
                                                 Permite a definição   de diferentes níveis de acesso aos
                                                    acessores get e set de uma propriedade
                                             Covariância                e contravariância em delegates
                                                 Maior flexibilidadenos tipos de parâmetros e tipo de
                                                    retorno de um método passado para um delegate
                                             Dentre            outros avanços na linguagem C#

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)     23
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 3.0: Novidades
                                             Novidades                na linguagem C# 3.0
                                                 Propriedades implementadas automaticamente
                                                 Iniciadores de objetos
                                                 Iniciadores de coleções
                                                 Variáveis locais e arrays com tipos deduzidos
                                                  implicitamente
                                                 Métodos de extensão
                                                 Expressões lambda
                                                 Árvores de expressão
                                                 Tipos anônimos
                                                 Expressões de consulta
                                                 Métodos parciais

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   24
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 3.0: Objetivos do projeto
                                             Integrar objetos, dados relacionais e XML
                                             Tornar a linguagem ainda mais concisa
                                             Adicionar construtores de programação funcional
                                             Não vincular a linguagem a APIs específicas
                                             Manter 100% de compatibilidade com a versão 2.0
                                             Integrar a linguagem C# com o LINQ




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   25
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 3.0: LINQ
                                               C# 3.0 ou superior                   VB 9.0 ou superior                  Outras linguagens…



                                                              .NET LINQ (Language INtegrated Query)
                                                                                                                                                 Outro
                                                 LINQ to          LINQ to            LINQ to          LINQ to           LINQ to
                                                                                                                                                provedor
                                                 Objects          DataSets             SQL            Entities            XML
                                                                                                                                                  LINQ

                                                                                                                   <agenda>
                                                                                                                     <contato>
                                                                                                                       <nome>. . . </nome>
                                                                                                                       <email> . . . </email>
                                                                                                                       <fone/> . . . </fone>
                                                                                                                     <contato/>
                                                                                                                     ...
                                                                                                                   </agenda>


                                                   Objetos                    Bancos de dados
                                                                                relacionais                                 XML

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                                  26
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 3.0: Expressões de consulta
                                                                Inicia com from
                                                                                                     Zero ou mais from,
                                                                                                     join, let, where ou
                                              from id in fonte                                       orderby
                                            { from id in fonte |
                                              join id in fonte on expr equals expr [ into id ] |
                                              let id = expressão |
                                              where condição |
                                              orderby id1, id2, … *ascending | descending] }
                                              select expressão | group expressão by chave
                                            [ into id ]
                                                                                                                            Termina com select
                                                                                                                            ou group by




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                        27
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 3.0: Expressões de consulta
                                             Expressões   de consulta são traduzidas para
                                                invocações de métodos de extensão
                                                 Where, Join, OrderBy, Select, GroupBy, …

                                                                    from c in contatos
                                                                    where c.Sexo == Sexo.Feminino
                                                                    select new { c.Nome, c.Email };


                                                                    contatos
                                                                    .Where(c => c.Sexo == Sexo.Feminino)
                                                                    .Select(c => new { c.Nome, c.Email });



                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   28
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 3.0: Inovações na linguagem

                                                                                                                            Expressões
                                                             var mulheres =                    de consulta
                                                               from c in contatos
                                               Tipos
                                                               where c.Sexo == Sexo.Feminino
                                                                                                                                          Árvores de
                                             implícitos        select new { c.Nome, c.Email };                                            expressão
                                            em variáveis
                                               locais
                                                                                                 Expressões                              Propriedades
                                                                                                   lambda                                automáticas
                                                             var mulheres =
                                                               contatos
                                                                                                                                          Métodos
                                                               .Where(c => c.Sexo == Sexo.Feminino)                                       parciais
                                                               .Select(c => new { c.Nome, c.Email });
                                             Métodos
                                                de
                                             extensão                  Tipos                                            Iniciadores
                                                                     anônimos                                           de objetos

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                               29
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 4: Inovações
                                             Objetos tipados dinamicamente
                                             Parâmetros opcionais e nomeados
                                             Melhorias na interoperabilidade com COM
                                             Covariância e contravariância




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   30
Edição SP 2010
Plataforma Java x Plataforma .NET            C# 4: Objetos tipados dinamicamente
                                                                       Calculadora calc = ObterCalculadora();
                                                                       int soma = calc.Adicionar(10, 20);

                                                   object calc = ObterCalculadora();
                                                   Type TipoCalc = calc.GetType();
                                                   object resultado = calcType.InvokeMember(
                                                       "Adicionar", BindingFlags.InvokeMethod,
                                                       null, new object[] { 10, 20 });
                                                   int soma = Convert.ToInt32(resultado);

                                                                       ScriptObject calc = ObterCalculadora();
                                                                       object resultado = calc.Invoke("Adicionar", 10, 20);
                                                                       int soma = Convert.ToInt32(resultado);

                                             Tipagem estática
                                            orientada para ser                   dynamic calc = ObterCalculadora();
                                                                                 int soma = calc.Adicionar(10, 20);
                                                 dinâmica

                                                                         Conversão                             Invocação dinâmica
                                                                          dinâmica                                 do método

                                             © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)          31
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 4: Objetos tipados dinamicamente
                                                                                 public static class Math
                                                                                 {
                                                                                    public static decimal Abs(decimal value);
                                                                                    public static double Abs(double value);
                                                                                    public static float Abs(float value);
                                                                                    public static int Abs(int value);
                                                                                    public static long Abs(long value);
                                            Método escolhido em                     public static sbyte Abs(sbyte value);
                                            tempo de compilação:                    public static short Abs(short value);
                                             double Abs(double x)                   ...
                                                                                 }

                                            double x = 1.75;
                                                                                                 Método escolhido em
                                            double y = Math.Abs(x);
                                                                                                 tempo de execução:
                                                                                                 double Abs(double x)
                                            dynamic x = 1.75;
                                            dynamic y = Math.Abs(x);
                                                                                                 Método escolhido em
                                            dynamic x = 2;                                       tempo de execução:
                                            dynamic y = Math.Abs(x);                                 int Abs(int x)

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)       32
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 4: Parâmetros opcionais e nomeados

                                                 public StreamReader OpenTextFile(                                          Método primário
                                                     string path,
                                                     Encoding encoding,
                                                     bool detectEncoding,
                                                     int bufferSize);

                                                                                                                                 Sobrecargas
                                                      public StreamReader OpenTextFile(                                          secundárias
                                                          string path,
                                                          Encoding encoding,
                                                          bool detectEncoding);                                              Chamadas ao método
                                                                                                                             primário com valores
                                                      public StreamReader OpenTextFile(                                            padrões
                                                          string path,
                                                          Encoding encoding);

                                                      public StreamReader OpenTextFile(
                                                          string path);



                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                           33
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 4: Parâmetros opcionais e nomeados

                                               public StreamReader OpenTextFile(                                       Parâmetros opcionais
                                                   string path,
                                                   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 avaliados                            Argumentos
                                          nomeados podem
                                                                                na ordem da escrita                         nomeados precisam
                                        aparecer em qualquer
                                                                                                                              ser os últimos
                                               ordem
                                                                                                             Argumentos não
                                                      OpenTextFile(
                                                                                                           opcionais devem ser
                                                          bufferSize: 4096,
                                                          path: "foo.txt",                                    especificados
                                                          detectEncoding: false);

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                       34
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 4: Interoperabilidade com COM
                                                     object fileName = "Test.docx";
                                                     object missing = System.Reflection.Missing.Value;

                                                     doc.SaveAs(ref fileName,
                                                         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("Test.docx");


                                             Parâmetros nomeados e opcionais
                                             Modificador ref opcional



                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   35
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 4: Covariância e contravariância
                                                                                                                          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 =
                                                   bool MoveNext();             GetStrings();
                                                }                           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 = GetComparer();
                                                                                       IComparer<string> strComp = objComp;

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                       36
Edição SP 2010
Plataforma Java x Plataforma .NET           Demonstração
                                             Usando   os conhecimento de SQL para criar consultas
                                                com LINQ na linguagem C# 3.0 ou superior

                                                                           Linguagem C# 3.0 ou superior

                                                             .NET LINQ (Language INtegrated Query)
                                                                                            LINQ to
                                                                                            Objects




                                                                                            Objetos

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   37
Edição SP 2010
Plataforma Java x Plataforma .NET           C# 5: Compilador como um serviço
                                                                                             Classe
                                                                                                                                   Laço
                                            Meta-programação
                                                                                 public                 Classe1             Ler-Avaliar-Imprimir

                                                                                               Campo

                                              Modelo de objetos                                                       Incorporação de
                                               da linguagem                       private                  campo1
                                                                                                                            DSL
                                                                                                 string           (Domain Specific Language)


                                                   Arquivo
                                                                                                                                   Assembly .NET
                                                    fonte
                                                 Source code                                                                         Source code
                                                  Source code                             Compilador                                  Source code




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                           38
Edição SP 2010
Plataforma Java x Plataforma .NET           Conclusão
                                            A      linguagem C#
                                                 Evolução constante incorporando  cada vez mais recursos
                                                    e tornando a linguagem extremamente poderosa
                                                       C# 1.0 em fevereiro de 2002 (.NET Framework 1.0)
                                                       C# 2.0 em novembro de 2005 (.NET Framework 2.0)
                                                       C# 3.0 em novembro de 2007 (.NET Framework 3.5)
                                                       C# 4 em abril de 2010 (.NET Framework 4.0)
                                                       C# 5, provavelmente, no segundo semestre 2012 ou em 2013
                                                 Problemas das                constantes evoluções da linguagem
                                                       Aliado ao poder, a linguagem de programação está se tornando
                                                        cada vez mais complexa
                                                         Está cada vez mais complicado para que desenvolvedores iniciantes
                                                          aprendam os recursos disponíveis das novas versões da linguagem C#
                                                         Diversos recursos introduzidos nas novas versões da linguagem exigem
                                                          domínio de conceitos complexos das versões anteriores
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)        39
Edição SP 2010
Plataforma Java x Plataforma .NET           Referências
                                             Microsoft              Channel 9
                                                 Expert to Expert:
                                                    Erik Meijer and Anders Hejlsberg
                                                    The Future of C#
                                                       http://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert-
                                                        Anders-Hejlsberg-The-Future-of-C
                                             Visual         C# Developer Center
                                                 Português brasileiro
                                                       http://msdn.microsoft.com/pt-br/vcsharp/
                                                 Inglês americano
                                                       http://msdn.microsoft.com/en-us/vcsharp/
                                             Visual         Studio Express e SQL Server Express (gratuitos)
                                                 http://www.microsoft.com/express/
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   40

Contenu connexe

Tendances

Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoRegis Magalhães
 
Apostila desenvolvimento aplicações comerciais com C#
Apostila desenvolvimento aplicações comerciais com C#Apostila desenvolvimento aplicações comerciais com C#
Apostila desenvolvimento aplicações comerciais com C#Vinicius Vieira
 
AAB307 - Frameworks and Application Blocks - wcamb
AAB307 - Frameworks and Application Blocks - wcambAAB307 - Frameworks and Application Blocks - wcamb
AAB307 - Frameworks and Application Blocks - wcambMicrosoft Brasil
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Egenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a AspectosEgenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a Aspectosdyegoitallo
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipseFilipe Bezerra Sousa
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Raphael Marques
 
C sharp feup10set2001
C sharp feup10set2001C sharp feup10set2001
C sharp feup10set2001leojr_0
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 

Tendances (20)

Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Java com Excelência
Java com ExcelênciaJava com Excelência
Java com Excelência
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Introducao ao .Net
Introducao ao .NetIntroducao ao .Net
Introducao ao .Net
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Apostila desenvolvimento aplicações comerciais com C#
Apostila desenvolvimento aplicações comerciais com C#Apostila desenvolvimento aplicações comerciais com C#
Apostila desenvolvimento aplicações comerciais com C#
 
AAB307 - Frameworks and Application Blocks - wcamb
AAB307 - Frameworks and Application Blocks - wcambAAB307 - Frameworks and Application Blocks - wcamb
AAB307 - Frameworks and Application Blocks - wcamb
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Egenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a AspectosEgenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a Aspectos
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
Introducao java
Introducao javaIntroducao java
Introducao java
 
Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
 
C sharp feup10set2001
C sharp feup10set2001C sharp feup10set2001
C sharp feup10set2001
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Programação orientada a aspectos
Programação orientada a aspectosProgramação orientada a aspectos
Programação orientada a aspectos
 

En vedette

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
 
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
 
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
 
Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Rogé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
 

En vedette (6)

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
 
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
 
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
 
Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4
 
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
 
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
 

Similaire à Linguagem de programação C# 4 e 5

TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
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
 
TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#Rogério Moraes de Carvalho
 
Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1D M
 
Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Julian Correa
 
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
 
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...Rogério Moraes de Carvalho
 
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONITOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONIFábio Delboni
 

Similaire à Linguagem de programação C# 4 e 5 (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: 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#
 
TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#
 
Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1
 
Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2
 
Apostila de devc++ novo
Apostila de devc++ novoApostila de devc++ novo
Apostila de devc++ novo
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
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
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
apostila de dev.pdf
apostila de dev.pdfapostila de dev.pdf
apostila de dev.pdf
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Aula 1 pc - slides
Aula 1   pc - slidesAula 1   pc - slides
Aula 1 pc - slides
 
Csharp
CsharpCsharp
Csharp
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
 
Seminário: C
Seminário: CSeminário: C
Seminário: C
 
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONITOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
 

Plus de Rogé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
 
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...Rogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realRogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebRogério Moraes de Carvalho
 

Plus de Rogério Moraes de Carvalho (20)

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
 
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 ...
 
`
``
`
 
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo real
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões Web
 

Linguagem de programação C# 4 e 5

  • 1. Plataforma Java x Plataforma .NET Edição SP 2010 Tema 2 Linguagem de programação Linguagem de programação C# 4 Novidades da próxima versão: C# 5 Rogério Moraes de Carvalho Twitter: @rogeriomc rogeriom@gmx.net
  • 2. Edição SP 2010 Plataforma Java x Plataforma .NET Agenda  A evolução da linguagem C#  C# 1.0: A linguagem  C# 1.0: Tipos por valor e por referência  C# 1.0: Arrays  C# 1.0: Sistema unificado de tipos  C# 1.0: Gerenciamento de memória  C# 1.0: Classes e seus membros  C# 1.0: Acessibilidade de membros  C# 1.0: Exemplo de membros  C# 1.0: Estrutura © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 2
  • 3. Edição SP 2010 Plataforma Java x Plataforma .NET Agenda  C# 1.0: Estruturas versus classes  C# 1.0: Interfaces  C# 1.0: Herança e polimorfismo  C# 1.0: Enumerações  C# 1.0: Delegates  C# 2.0: Generics, Iterators, ...  C# 2.0: Métodos anônimos, ...  C# 2.0: Classes estáticas, ...  C# 3.0: Novidades  C# 3.0: Objetivos do projeto © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 3
  • 4. Edição SP 2010 Plataforma Java x Plataforma .NET Agenda  C# 3.0: LINQ  C# 3.0: Expressões de consulta  C# 3.0: Expressões de consulta  C# 3.0: Inovações na linguagem  C# 4: Inovações  C# 4: Objetos tipados dinamicamente  C# 4: Parâmetros opcionais e nomeados  C# 4: Interoperabilidade com COM  C# 4: Covariância e contravariância  Demonstração © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 4
  • 5. Edição SP 2010 Plataforma Java x Plataforma .NET Agenda  C# 5: Compilador como um serviço  Conclusão  Referências © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 5
  • 6. Edição SP 2010 Plataforma Java x Plataforma .NET A evolução da linguagem C# C# 5 Compilador como um serviço (? 2012/2013) Objetos tipados dinamicamente, C# 4 parâmetros opcionais e nomeados, (Abr 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, tipos anuláveis, C# 2.0 classes estáticas, métodos anônimos, ... (Nov 2005) Código gerenciado, linguagem de POO, suporte nativo a C# 1.0 propriedades e eventos, documentação XML, exceções, (Fev 2002) segurança de tipos, delegates, sobrecarga de operadores, ... © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 6
  • 7. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: A linguagem  C# (C Sharp)  Linguagem de programação simples, moderna, orientada a objetos e de tipos de seguros  “Olá, mundo!” em C# using System; class OlaMundo { static void Main() { Console.WriteLine("Olá, mundo!"); } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 7
  • 8. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Tipos por valor e por referência  C# suporta duas classificações de tipos  Tipos por valor (value types)  Tipos enumerações enum Cor { Vemelho, Verde, Azul }  Tipos estruturas struct Ponto { ... }  Algumas estruturas pré-definidas: bool, char, int, double, ...  Tipos por referência (reference types)  Tipos classes class Pessoa { ... }  Tipos interfaces interface IConexao { ... }  Tipos delegates delegate void Acao();  Tipos arrays int[] primos = { 2, 3, 5, 7, 11 } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 8
  • 9. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Arrays  O que é um array?  É uma estrutura de dados que contém um número fixo de variáveis chamadas de elementos do array  Os elementos do array são acessados por índices iniciados em zero  Tipos de arrays  Unidimensionais int[] arr = new int[5];  Multidimensionais  Retangulares  Irregulares int[,] a2; int[][] j2; int[,,] a3; int[][][] j3; © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 9
  • 10. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Sistema unificado de tipos  O C# fornece um sistema de tipos unificado  Todos os tipos, incluindo tipos por valor, derivam do tipo object (System.Object)  É possível chamar métodos da classe object em qualquer valor, mesmo em valores de tipos “primitivos” como int  Ao armazenar um tipo por valor numa variável do tipo object, ocorre um processo denominado boxing using System; class Boxing { class IntParaString static void Main() { { int i = 123; static void Main() { // Boxing Console.WriteLine( object o = i; 3.ToString("C") // Unboxing ); int j = (int)o; } } } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 10
  • 11. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Gerenciamento de memória  Gerenciamento manual de memória  Requer que o desenvolvedor gerencie a alocação e liberação de blocos de memória  Tarefa repetitiva e sujeita a erros  Gerenciamento automático de memória  Usado pelo C# para livrar os desenvolvedores da tarefa cansativa de gerenciar a memória  O serviço do CLR (Common Language Runtime) responsável pela liberação da memória usada por objetos é denominado coletor de lixo (garbage collector)  Um objeto se torna elegível a ser coletado pelo coletor de lixo quando não há a possibilidade de nenhum código acessá-lo © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 11
  • 12. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Classes e seus membros  Classes  Membros de classes  Definem novos tipos por  Classes podem ter os referência seguintes tipos de  Uma classe pode herdar membros de outra classe  Constantes  Herança simples (de uma  Campos única classe)  Propriedades  Uma classe pode  Indexadores (indexers) implementar múltiplas  Métodos interfaces  Eventos  Operadores  Construtores  Destrutores  Tipos aninhados © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 12
  • 13. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Acessibilidade de membros  Acessibilidade de membros de classes  Cada membro tem uma acessibilidade associada  Controla as regiões de texto de programa que estão habilitadas a acessar o membro Modificador Acessibilidade de acesso public Acesso ilimitado Acesso limitado ao tipo contêiner ou tipos protected derivados deste tipo internal Acesso limitado ao assembly Acesso limitado ao tipo contêiner ou tipos protected derivados deste tipo ou ao assembly internal (protected + internal) private Acesso limitado ao tipo contêiner © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 13
  • 14. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Exemplo de membros  Classe com cada um dos tipos de membros class Classe { public const int Constante = 12; private int campo; private static int campoEstatico = 34; public void MetodoSemParametroNemRetorno() { ... } public string MetodoComParametroComRetorno(double d) { ... } public int Propriedade { get{ return campo; } set { campo = value; } } public int PropriedadeSomenteLeitura { get{ ... } } public event EventHandler Evento; public int this[int index] { get { ... } set { ... } } public static Classe operator +(Classe a, Classe b) { ... } public Classe() { ... } public Classe(int valor) { ... } static Classe() { ... } ~Classe() { ... } class ClasseAninhada { ... } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 14
  • 15. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Estrutura  Conceito de estrutura  É um tipo por valor que, com algumas exceções, permite a definição dos mesmos tipos de membros que as classes  Uma vez que não é um tipo por referência, o valor de uma estrutura é armazenada na memória “stack” (“in-line”)  Deste modo, a liberação do valor de uma estrutura não é realizada pelo coletor de lixo (garbage collector)  Por este motivo, uma estrutura não suporta o membro destrutor  Estruturas podem implementar interfaces, mas não suportam herança  Quando usar estruturas ao invés de classes?  Geralmente, estruturas devem ser utilizadas em tipos que armazenam poucos dados  Recomenda-se usar estruturas com, no máximo, 16 bytes (128 bits) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 15
  • 16. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Estruturas versus classes  Exemplo da declaração de uma estrutura versus a declaração de uma classe struct Ponto { class Ponto { private int x, y; private int x, y; public int X { public int X { get { return x; } get { return x; } set { x = value; } set { x = value; } } } public int Y { public int Y { get { return y; } get { return y; } set { y = value; } set { y = value; } } } public Ponto(int x, int y) { public Ponto(int x, int y) { this.x = x; this.x = x; this.y = y; this.y = y; } } } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 16
  • 17. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Interfaces  Conceito de interface  Uma interface define um contrato  Classes e estruturas podem implementar múltiplas interfaces  Características de uma interface  Interfaces podem ter os seguintes membros  Métodos, propriedades, eventos e indexers  Exemplo da declaração de uma interface using System; interface IInterface { string this[int indice] { get; set; } event EventHandler Evento; void Metodo(int valor); string Propriedade { get; set; } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 17
  • 18. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Herança e polimorfismo  Classes abstratas  Classes definidas para serem classes bases de outras classes abstract class ClasseAbstrata { ... }  Membros virtuais (palavra-chave virtual)  Permite que um membro seja sobrescrito na classe derivada  Métodos, propriedades, indexadores e eventos podem ser virtuais using System; class Classe { public virtual void MetodoPolimorfico { ... } public virtual int PropriedadePolimorfica { get; set; } public virtual Classe this[int indice] { get; set; } public virtual event EventHandler EventoPolimorfico; }  Por padrão, membros não virtuais de uma classe não são polimórficos © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 18
  • 19. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Enumerações  Conceito de enumeração  É um tipo por valor que herda da classe System.Enum e fornece nomes para substituir os valores de um tipo primitivo base  Restrições de uma enumeração  Em C#, uma enumeração não pode:  definir seus próprios métodos, propriedades ou eventos  implementar interfaces  Exemplo da declaração de uma enumeração enum FormaPagamento { Dinheiro, Cheque, BoletoBancario, CartaoCredito } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 19
  • 20. Edição SP 2010 Plataforma Java x Plataforma .NET C# 1.0: Delegates  O que é um delegate?  Um tipo por referência usado para referenciar um método com uma assinatura compatível  Similar a ponteiro de função em C++, mas é um tipo seguro  Delegates são usados por manipuladores de eventos e métodos de retorno (callback)  Exemplos de declarações de delegates using System; delegate void Acao(); delegate void EventHandler(object sender, EventArgs e); © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 20
  • 21. Edição SP 2010 Plataforma Java x Plataforma .NET C# 2.0: Generics, Iterators, ...  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 avançado 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  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 © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 21
  • 22. Edição SP 2010 Plataforma Java x Plataforma .NET C# 2.0: Métodos anônimos, ...  Tipos anuláveis  Permitem que uma variável de tipo por valor contenha um valor indefinido  Úteis ao se trabalhar com bancos de dados ou outras estruturas  Métodos anônimos  Torna possível a passagem de um bloco de código como um parâmetro  Em qualquer lugar que um delegate é esperado, um bloco de código pode ser passado  Não há a necessidade da definição de um novo método  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 © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 22
  • 23. Edição SP 2010 Plataforma Java x Plataforma .NET C# 2.0: Classes estáticas, ...  Classes estáticas  Fornece um modo seguro e conveniente de declarar uma classe que não pode ser instanciada e contém somente métodos estáticos  Anteriormente era necessário definir o construtor default da classe como privado para não permitir que a mesma fosse instanciada  Acessores de uma propriedade  Permite a definição de diferentes níveis de acesso aos acessores get e set de uma propriedade  Covariância e contravariância em delegates  Maior flexibilidadenos tipos de parâmetros e tipo de retorno de um método passado para um delegate  Dentre outros avanços na linguagem C# © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 23
  • 24. Edição SP 2010 Plataforma Java x Plataforma .NET C# 3.0: Novidades  Novidades na linguagem C# 3.0  Propriedades implementadas automaticamente  Iniciadores de objetos  Iniciadores de coleções  Variáveis locais e arrays com tipos deduzidos implicitamente  Métodos de extensão  Expressões lambda  Árvores de expressão  Tipos anônimos  Expressões de consulta  Métodos parciais © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 24
  • 25. Edição SP 2010 Plataforma Java x Plataforma .NET C# 3.0: Objetivos do projeto  Integrar objetos, dados relacionais e XML  Tornar a linguagem ainda mais concisa  Adicionar construtores de programação funcional  Não vincular a linguagem a APIs específicas  Manter 100% de compatibilidade com a versão 2.0  Integrar a linguagem C# com o LINQ © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 25
  • 26. Edição SP 2010 Plataforma Java x Plataforma .NET C# 3.0: LINQ C# 3.0 ou superior VB 9.0 ou superior Outras linguagens… .NET LINQ (Language INtegrated Query) Outro LINQ to LINQ to LINQ to LINQ to LINQ to provedor Objects DataSets SQL Entities XML LINQ <agenda> <contato> <nome>. . . </nome> <email> . . . </email> <fone/> . . . </fone> <contato/> ... </agenda> Objetos Bancos de dados relacionais XML © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 26
  • 27. Edição SP 2010 Plataforma Java x Plataforma .NET C# 3.0: Expressões de consulta Inicia com from Zero ou mais from, join, let, where ou from id in fonte orderby { from id in fonte | join id in fonte on expr equals expr [ into id ] | let id = expressão | where condição | orderby id1, id2, … *ascending | descending] } select expressão | group expressão by chave [ into id ] Termina com select ou group by © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 27
  • 28. Edição SP 2010 Plataforma Java x Plataforma .NET C# 3.0: Expressões de consulta  Expressões de consulta são traduzidas para invocações de métodos de extensão  Where, Join, OrderBy, Select, GroupBy, … from c in contatos where c.Sexo == Sexo.Feminino select new { c.Nome, c.Email }; contatos .Where(c => c.Sexo == Sexo.Feminino) .Select(c => new { c.Nome, c.Email }); © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 28
  • 29. Edição SP 2010 Plataforma Java x Plataforma .NET C# 3.0: Inovações na linguagem Expressões var mulheres = de consulta from c in contatos Tipos where c.Sexo == Sexo.Feminino Árvores de implícitos select new { c.Nome, c.Email }; expressão em variáveis locais Expressões Propriedades lambda automáticas var mulheres = contatos Métodos .Where(c => c.Sexo == Sexo.Feminino) parciais .Select(c => new { c.Nome, c.Email }); Métodos de extensão Tipos Iniciadores anônimos de objetos © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 29
  • 30. Edição SP 2010 Plataforma Java x Plataforma .NET C# 4: Inovações  Objetos tipados dinamicamente  Parâmetros opcionais e nomeados  Melhorias na interoperabilidade com COM  Covariância e contravariância © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 30
  • 31. Edição SP 2010 Plataforma Java x Plataforma .NET C# 4: Objetos tipados dinamicamente Calculadora calc = ObterCalculadora(); int soma = calc.Adicionar(10, 20); object calc = ObterCalculadora(); Type TipoCalc = calc.GetType(); object resultado = calcType.InvokeMember( "Adicionar", BindingFlags.InvokeMethod, null, new object[] { 10, 20 }); int soma = Convert.ToInt32(resultado); ScriptObject calc = ObterCalculadora(); object resultado = calc.Invoke("Adicionar", 10, 20); int soma = Convert.ToInt32(resultado); Tipagem estática orientada para ser dynamic calc = ObterCalculadora(); int soma = calc.Adicionar(10, 20); dinâmica Conversão Invocação dinâmica dinâmica do método © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 31
  • 32. Edição SP 2010 Plataforma Java x Plataforma .NET C# 4: Objetos tipados dinamicamente public static class Math { public static decimal Abs(decimal value); public static double Abs(double value); public static float Abs(float value); public static int Abs(int value); public static long Abs(long value); Método escolhido em public static sbyte Abs(sbyte value); tempo de compilação: public static short Abs(short value); double Abs(double x) ... } double x = 1.75; Método escolhido em double y = Math.Abs(x); tempo de execução: double Abs(double x) dynamic x = 1.75; dynamic y = Math.Abs(x); Método escolhido em dynamic x = 2; tempo de execução: dynamic y = Math.Abs(x); int Abs(int x) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 32
  • 33. Edição SP 2010 Plataforma Java x Plataforma .NET C# 4: Parâmetros opcionais e nomeados public StreamReader OpenTextFile( Método primário string path, Encoding encoding, bool detectEncoding, int bufferSize); Sobrecargas public StreamReader OpenTextFile( secundárias string path, Encoding encoding, bool detectEncoding); Chamadas ao método primário com valores public StreamReader OpenTextFile( padrões string path, Encoding encoding); public StreamReader OpenTextFile( string path); © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 33
  • 34. Edição SP 2010 Plataforma Java x Plataforma .NET C# 4: Parâmetros opcionais e nomeados public StreamReader OpenTextFile( Parâmetros opcionais string path, 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 avaliados Argumentos nomeados podem na ordem da escrita nomeados precisam aparecer em qualquer ser os últimos ordem Argumentos não OpenTextFile( opcionais devem ser bufferSize: 4096, path: "foo.txt", especificados detectEncoding: false); © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 34
  • 35. Edição SP 2010 Plataforma Java x Plataforma .NET C# 4: Interoperabilidade com COM object fileName = "Test.docx"; object missing = System.Reflection.Missing.Value; doc.SaveAs(ref fileName, 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("Test.docx");  Parâmetros nomeados e opcionais  Modificador ref opcional © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 35
  • 36. Edição SP 2010 Plataforma Java x Plataforma .NET C# 4: Covariância e contravariância 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 = bool MoveNext(); GetStrings(); } 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 = GetComparer(); IComparer<string> strComp = objComp; © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 36
  • 37. Edição SP 2010 Plataforma Java x Plataforma .NET Demonstração  Usando os conhecimento de SQL para criar consultas com LINQ na linguagem C# 3.0 ou superior Linguagem C# 3.0 ou superior .NET LINQ (Language INtegrated Query) LINQ to Objects Objetos © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 37
  • 38. Edição SP 2010 Plataforma Java x Plataforma .NET C# 5: Compilador como um serviço Classe Laço Meta-programação public Classe1 Ler-Avaliar-Imprimir Campo Modelo de objetos Incorporação de da linguagem private campo1 DSL string (Domain Specific Language) Arquivo Assembly .NET fonte Source code Source code Source code Compilador Source code © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 38
  • 39. Edição SP 2010 Plataforma Java x Plataforma .NET Conclusão A linguagem C#  Evolução constante incorporando cada vez mais recursos e tornando a linguagem extremamente poderosa  C# 1.0 em fevereiro de 2002 (.NET Framework 1.0)  C# 2.0 em novembro de 2005 (.NET Framework 2.0)  C# 3.0 em novembro de 2007 (.NET Framework 3.5)  C# 4 em abril de 2010 (.NET Framework 4.0)  C# 5, provavelmente, no segundo semestre 2012 ou em 2013  Problemas das constantes evoluções da linguagem  Aliado ao poder, a linguagem de programação está se tornando cada vez mais complexa  Está cada vez mais complicado para que desenvolvedores iniciantes aprendam os recursos disponíveis das novas versões da linguagem C#  Diversos recursos introduzidos nas novas versões da linguagem exigem domínio de conceitos complexos das versões anteriores © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 39
  • 40. Edição SP 2010 Plataforma Java x Plataforma .NET Referências  Microsoft Channel 9  Expert to Expert: Erik Meijer and Anders Hejlsberg The Future of C#  http://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert- Anders-Hejlsberg-The-Future-of-C  Visual C# Developer Center  Português brasileiro  http://msdn.microsoft.com/pt-br/vcsharp/  Inglês americano  http://msdn.microsoft.com/en-us/vcsharp/  Visual Studio Express e SQL Server Express (gratuitos)  http://www.microsoft.com/express/ © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 40