TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com a linguagem C# para ser um desenvolvedor mais efetivo
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 801 views

Nesta palestra, eu apresentei uma visão geral da evolução da linguagem de programação C# desde o lançamento da versão 1.0, em fevereiro de 2002, até a versão 4, em março de 2010. Depois, eu ...

Nesta palestra, eu apresentei uma visão geral da evolução da linguagem de programação C# desde o lançamento da versão 1.0, em fevereiro de 2002, até a versão 4, em março de 2010. Depois, eu também apresentei a principal novidade da linguagem C# 5: suporte direto da linguagem à programação assíncrona. Este novo recurso permite que o desenvolvedor realize programação assíncrona de modo similar à programação síncrona. Além disto, eu também comentei sobre as principais novidades esperadas para a versão posterior (C# 6?), que atualmente é conhecida pelo nome de projeto Roslyn.

Statistics

Views

Total Views
801
Views on SlideShare
801
Embed Views
0

Actions

Likes
0
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Atualizando suas habilidadesde programação com alinguagem C# para ser umdesenvolvedor mais efetivoDEV303 Rogério Moraes de Carvalho VITA Informática @rogeriomc rogeriomc.wordpress.com
    • A evolução da linguagem C#Evolução C# 6? Projeto Roslyn (?) C# 5 Windows Runtime, (2012) programação assíncrona, ... Objetos tipados dinamicamente, C# 4 parâmetros opcionais e nomeados, (Mar 2010) covariância e contravariância, … Language Integrated Query (LINQ), C# 3.0 expressões Lambda, métodos de (Nov 2007) extensão, tipos anônimos, ... Generics, Iterators, tipos parciais, C# 2.0 tipos anuláveis, classes estáticas, (Nov 2005) métodos anônimos, ... Código gerenciado, linguagem POO,C# 1.0 suporte nativo a propriedades e(Fev 2002) eventos, exceções, delegates, ...
    • Sistema de tiposLinguagem C# 1.0 Suporte a duas categorias de tipos Tipos por valor Estruturas (incluindo os tipos simples) Enumerações Tipos por referência Arrays Classes Interfaces Delegates Sistema unificado de tipos object é base de todos tipos Boxing e Unboxing
    • Memória e instruçõesLinguagem C# 1.0 Gerenciamento automático de memória Coletor de lixo (Garbage Collector) Instruções inspiradas em C/C++ e Java Blocos, rótulos, variáveis e expressões Laços: while, do...while, for e foreach Exceções: try...catch...finally, throw Condicionais: if e switch checked e unchecked using
    • Herança e membros de classeLinguagem C# 1.0 Suporte a herança simples Membros possíveis em classes Constantes Campos Métodos Propriedades Eventos Operadores Indexadores Construtores Destrutores
    • Atributos e outros recursosLinguagem C# 1.0 Atributos Elementos que permitem fazer anotações de forma declarativa Namespaces e assemblies Versionamento Resolve o problema conhecido como DLL Hell do modelo COM
    • Explorando alinguagem C# 1.0Rogério Moraes de CarvalhoVITA Informática
    • Generics e IteratorsPrincipais novidades da linguagem C# 2.0 Generics Os tipos genéricos permitem um alto nível de reutilização de código Permite a definição de tipos parametrizáveis Desempenho melhorado em classes de coleções Iterators Torna simples a definição de como um laço foreach vai interagir com o conteúdo de uma coleção
    • Tipos parciais e anuláveisPrincipais novidades da linguagem C# 2.0 Tipos parciais As definições de classes, estruturas ou interfaces podem ser divididas em múltiplos arquivos O Visual Studio utiliza esta característica para separar o código gerado do código do usuário Tipos anuláveis Permite a uma variável de tipo por valor ter um valor indefinido Úteis ao se trabalhar com bancos de dados ou outras estruturas
    • Métodos anônimos e ::Principais novidades da linguagem C# 2.0 Métodos anônimos Tornam possível a passagem de um bloco de código como um parâmetro Em qualquer lugar em que um delegate é esperado Qualificador de apelidos de namespace O novo operador (::) fornece maior controle no acesso de membros de um namespace Habilidade de acessar um membro no namespace global
    • Classes estáticas e maisPrincipais novidades da linguagem C# 2.0 Classes estáticas Modo seguro e conveniente de declarar uma classe que contém somente membros estáticos e não deve ser instanciada Antes era necessário definir construtores de instância privados para não permitir que a mesma fosse instanciada Permite definir diferentes níveis de acesso nos métodos de leitura e escrita de uma propriedade
    • Explorando as novidades dalinguagem C# 2.0Rogério Moraes de CarvalhoVITA Informática
    • Principais inovações Expressões dePrincipais novidades da linguagem C# 3.0 consulta var mulheres = from c in contatos where c.Sexo == Sexo.Feminino select new { c.Nome, c.Email }; Árvores de expressãoTipos implícitos em variáveis Expressões locais lambda Propriedades var mulheres = automáticas contatos .Where(c => c.Sexo == Sexo.Feminino) Métodos .Select(c => new {c.Nome, c.Email}); parciais Métodos de Tipos Iniciadores de extensão objetos Iniciadores de anônimos coleções
    • LINQPrincipais novidades da linguagem C# 3.0 C# 3.0 VB 9.0 Outras linguagens… .NET LINQ (Language INtegrated Query) LINQ to LINQ to LINQ to LINQ to LINQ to Objects DataSets SQL Entities XML <agenda> <contato> <nome>. . . </nome> <email> . . . </email> <fone/> . . . </fone> <contato/> ... </agenda> Objetos Bancos de dados relacionais XML
    • Explorando as novidades dalinguagem C# 3.0Rogério Moraes de CarvalhoVITA Informática
    • Parâmetros opcionais enomeadosPrincipais novidades da linguagem C# 4 public StreamReader OpenTextFile( string path, Método primário Encoding encoding, bool detectEncoding, int bufferSize); public StreamReader OpenTextFile( string path, Encoding encoding, Sobrecargas bool detectEncoding); secundárias public StreamReader OpenTextFile( string path, Chamadas ao método Encoding encoding); primário com valores padrão public StreamReader OpenTextFile( string path);
    • Parâmetros opcionais enomeadosPrincipais novidades da linguagem C# 4 public StreamReader OpenTextFile( string path, Parâmetros opcionais Encoding encoding,= null, encoding bool detectEncoding,= true, detectEncoding int bufferSize); 1024); bufferSize = Argumentos nomeados OpenTextFile("foo.txt", Encoding.UTF8); OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096); Argumentos Argumentos Argumentos nomeados podem avaliados na ordem nomeados precisam aparecer em da escrita ser os últimos qualquer ordem Argumentos não OpenTextFile( opcionais devem ser bufferSize: 4096, path: "foo.txt", especificados detectEncoding: false);
    • Interoperabilidade com COMPrincipais novidades da linguagem C# 4 object nomeArquivo = "Teste.docx"; object missing = System.Reflection.Missing.Value; doc.SaveAs(ref nomeArquivo, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); doc.SaveAs("Teste.docx"); Parâmetros nomeados e opcionais Modificador ref opcional
    • Objetos com tipagem dinâmicaPrincipais novidades da linguagem C# 4 Calculadora calc = ObterCalculadora(); object calc = ObterCalculadora(); int soma = calc.Adicionar(10, 20); Type tipoCalc = calc.GetType(); object res = tipoCalc.InvokeMember("Adicionar", BindingFlags.InvokeMethod, null, new object[] { 10, 20 }); ScriptObject calc = ObterCalculadora(); int soma = Convert.ToInt32(res); res = calc.Invoke("Adicionar", 10, 20); object int soma = Convert.ToInt32(res); Tipado estaticamente dynamic calc = ObterCalculadora(); para ser dinâmico int sum = calc.Add(10, 20); Coversão Invocação dinâmica dinâmica do método
    • Covariância e contravariânciaPrincipais novidades da linguagem C# 4 out = covariância public interface IEnumerable<T> T> IEnumerable<out somente posições de { IEnumerator<T> GetEnumerator(); saída } Pode ser tratada como menos específica public interface IEnumerator<T> T> IEnumerator<out { T Current { get; } IEnumerable<string> strings = ObterStrings(); bool MoveNext(); IEnumerable<object> objects = strings; } in = contravariância somente posições de public interface IComparer<T> T> IComparer<in entrada { int Compare(T x, T y); Pode ser tratada como } mais específica IComparer<object> objComp = ObterComparer(); IComparer<string> strComp = objComp;
    • Explorando as novidades dalinguagem C# 4Rogério Moraes de CarvalhoVITA Informática
    • TAPPrincipais novidades da linguagem C# 5 Task-based Asynchronous Pattern Novo padrão de programação assíncrona no .NET Framework Baseado nos tipos Task e Task<TResult> do namespace System.Threading.Tasks Implementado por um único método NomeOperacaoAsync Deve retornar Task ou Task<TResult>, baseado no tipo de retorno void ou TResult, respectivamente, do método síncrono correspondente (NomeOperacao) Se a classe já tiver um método NomeOperacaoAsync, então deve-se usar NomeOperacaoTaskAsync
    • Versão assíncrona via TAPPrincipais novidades da linguagem C# 5Versão síncrona de uma operaçãoTRetorno NomeOperacao(TParam1 p1, TParam2 p2);Versão assíncrona da operaçãosíncrona segundo o padrão TAPTask<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2);Opcionais: cancelamento e progressoTask<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2 [, CancellationToken cancellationToken] Cancelamento [, IProgress<T> progress]); Progresso
    • Funções assíncronasPrincipais novidades da linguagem C# 5 Tipos de retorno das funções assíncronas Deve ser void, Task ou Task<TResult> Avaliação de funções assíncronas Inicialmente idêntica a uma função síncrona Quando atinge uma expressão await, a função assíncrona deve retornar imediatamente ao seu chamador Se a função assíncrona não for void, um objeto Task ou Task<TResult> será retornado para o chamador
    • Windows RuntimePrincipais novidades da linguagem C# 5 Windows Runtime Nova biblioteca da próxima versão do Windows projetada para ser usada com JavaScript, C#, Visual Basic e C++ Modelo de programação assíncrona Interface IAsyncOperation<T> O compilador automaticamente transforma código normal em uma máquina de estado de callback
    • async e awaitPrincipais novidades da linguagem C# 5 O suporte a funções assíncronas será incorporado à linguagem C# 5 Novas palavras-chaves: async e await A palavra-chave await é usada para marcar chamadas assíncronas Dispensa a criação de funções de callback A palavra-chave async deve estar na assinatura de funções que fazem chamadas assíncronas await somente pode ser usada na chamada de funções com async na assinatura
    • async e awaitPrincipais novidades da linguagem C# 5async Task<decimal> calcularVendasAsync(string arquivo){ using (TextReader leitor = new StreamReader(arquivo)) { string linha = null; decimal total = 0M; while ((linha = await leitor.ReadLineAsync()) != null) { string[] campos = linha.Split(;); total += decimal.Parse(campos[campos.Length - 1]); } return total; }}
    • Explorando as novidades dalinguagem C# 5Rogério Moraes de CarvalhoVITA Informática
    • Compiler-as-a-Service (CaaS)Principais novidades do projeto Roslyn Classe LaçoMeta-programação public Classe1 Ler-Avaliar-Imprimir Campo Modelo de objetos Incorporação de da linguagem private campo1 DSL (Domain string Specific Language) Código-fonte Assembly Código-fonte Assembly .NET Código-fonte Compilador Assembly .NET .NET
    • APIs para o CaaS Principais novidades do projeto Roslyn Edit and Continue Go To Definition Extract Method Completion List Object Browser Signature Help Navigate To References Quick Info Formatter Outlining Colorizer Rename Find All Serviços dalinguagem APIs docompilador Symbols Binding andPipeline do Syntax Symbol IL Emit Parser Binder Flow Analysiscompilador Tree API API Metadata Emitter API Import APIs
    • ConclusãoA linguagem C# está em evolução constante A evolução da linguagem C# C# 1.0 em fevereiro de 2002 (.NF 1.0) C# 2.0 em novembro de 2005 (.NF 2.0) C# 3.0 em novembro de 2007 (.NF 3.5) C# 4 em abril de 2010 (.NF 4) C# 5 em 2012 (.NF 4.5) Suporte ao Windows Runtime Facilidade na programação assíncrona Projeto Roslyn Compiler-as-a-Service (CaaS) Visual Studio Roslyn CTP Previsão: meados de outubro/2011
    • Conteúdo Relacionado Visual Studio Asynchronous Programming msdn.microsoft.com/vstudio/async Whats New for Visual C# in Visual Studio 11 Developer Preview go.microsoft.com/fwlink/?LinkId=228087 MSDN Webcast: C# 5 – Task-based Asynchronous Pattern (TAP), async e await https://msevents.microsoft.com/CUI/EventDetail.aspx? EventID=1032477469
    • Palestras Relacionadas DEV304 – C# e Visual Basic Future: Async Made Simple Giovanni Bassi (29/09 18:40 às 19:50) DEV310 – Visual Studio vNext a nova geração Brian Keller, Rodrigo de Carvalho (29/09 11:20 às 12:30) WEB302 – Presente e futuro da linguagem de programação JavaScript Rogério Moraes de Carvalho (29/09 18:40 às 19:50)
    • Get the free mobile app for your phonehttp:/ / gettag.mobi http://technet.microsoft.com/pt-brGet the free mobile app for your phonehttp:/ / gettag.mobi http://msdn.microsoft.com/pt-br
    • Não esqueça depreencher sua avaliação onlinewww.teched.com.br/avaliacao Get the free mobile app for your phone http:/ / gettag.mobi
    • © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing marketconditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.