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.
2. Atualizando suas habilidades
de programação com a
linguagem C# para ser um
desenvolvedor mais efetivo
DEV303
Rogério Moraes de Carvalho
VITA Informática
@rogeriomc
rogeriomc.wordpress.com
3. A evolução da linguagem C#
Evolução C# 6? Projeto Roslyn
(?)
C# 5 Windows Runtime,
(2012) programação assíncrona, ...
Objetos tipados dinamicamente,
C# 4 parâmetros opcionais e nomeados,
(Mar 2010)
covariância e contravariância, …
Language Integrated Query (LINQ),
C# 3.0 expressões Lambda, métodos de
(Nov 2007)
extensão, tipos anônimos, ...
Generics, Iterators, tipos parciais,
C# 2.0 tipos anuláveis, classes estáticas,
(Nov 2005)
métodos anônimos, ...
Código gerenciado, linguagem POO,
C# 1.0 suporte nativo a propriedades e
(Fev 2002)
eventos, exceções, delegates, ...
4. Sistema de tipos
Linguagem C# 1.0
Suporte a duas categorias de tipos
Tipos por valor
Estruturas (incluindo os tipos simples)
Enumerações
Tipos por referência
Arrays
Classes
Interfaces
Delegates
Sistema unificado de tipos
object é base de todos tipos
Boxing e Unboxing
5. Memória e instruções
Linguagem C# 1.0
Gerenciamento automático de
memória
Coletor de lixo (Garbage Collector)
Instruções inspiradas em C/C++ e
Java
Blocos, rótulos, variáveis e expressões
Laços: while, do...while, for e foreach
Exceções: try...catch...finally, throw
Condicionais: if e switch
checked e unchecked
using
6. Herança e membros de classe
Linguagem C# 1.0
Suporte a herança simples
Membros possíveis em classes
Constantes
Campos
Métodos
Propriedades
Eventos
Operadores
Indexadores
Construtores
Destrutores
7. Atributos e outros recursos
Linguagem C# 1.0
Atributos
Elementos que permitem fazer
anotações de forma declarativa
Namespaces e assemblies
Versionamento
Resolve o problema conhecido como
DLL Hell do modelo COM
9. Generics e Iterators
Principais novidades da linguagem C# 2.0
Generics
Os tipos genéricos permitem um alto
nível de reutilização de código
Permite a definição de tipos
parametrizáveis
Desempenho melhorado em classes de
coleções
Iterators
Torna simples a definição de como
um laço foreach vai interagir com o
conteúdo de uma coleção
10. Tipos parciais e anuláveis
Principais novidades da linguagem C# 2.0
Tipos parciais
As definições de classes, estruturas ou
interfaces podem ser divididas em
múltiplos arquivos
O Visual Studio utiliza esta característica
para separar o código gerado do código do
usuário
Tipos anuláveis
Permite a uma variável de tipo por
valor ter um valor indefinido
Úteis ao se trabalhar com bancos
de dados ou outras estruturas
11. Métodos anônimos e ::
Principais novidades da linguagem C# 2.0
Métodos anônimos
Tornam possível a passagem de um
bloco de código como um parâmetro
Em qualquer lugar em que um delegate é
esperado
Qualificador de apelidos de
namespace
O novo operador (::) fornece maior
controle no acesso de membros
de um namespace
Habilidade de acessar um
membro no namespace global
12. Classes estáticas e mais
Principais novidades da linguagem C# 2.0
Classes estáticas
Modo seguro e conveniente de declarar
uma classe que contém somente
membros estáticos e não deve ser
instanciada
Antes era necessário definir construtores
de instância privados para não permitir que
a mesma fosse instanciada
Permite definir diferentes níveis de
acesso nos métodos de leitura e
escrita de uma propriedade
14. Principais inovações Expressões de
Principais novidades da linguagem C# 3.0 consulta
var mulheres =
from c in contatos
where c.Sexo == Sexo.Feminino
select new { c.Nome, c.Email }; Árvores de
expressão
Tipos implícitos
em variáveis Expressões
locais lambda Propriedades
var mulheres = automáticas
contatos
.Where(c => c.Sexo == Sexo.Feminino) Métodos
.Select(c => new {c.Nome, c.Email}); parciais
Métodos de Tipos Iniciadores de
extensão objetos Iniciadores de
anônimos
coleções
15. LINQ
Principais novidades da linguagem C# 3.0
C# 3.0 VB 9.0 Outras linguagens…
.NET LINQ (Language INtegrated Query)
LINQ to LINQ to LINQ to LINQ to LINQ to
Objects DataSets SQL Entities XML
<agenda>
<contato>
<nome>. . . </nome>
<email> . . . </email>
<fone/> . . . </fone>
<contato/>
...
</agenda>
Objetos Bancos de dados
relacionais XML
20. Objetos com tipagem dinâmica
Principais novidades da linguagem C# 4
Calculadora calc = ObterCalculadora();
object calc = ObterCalculadora(); int soma = calc.Adicionar(10, 20);
Type tipoCalc = calc.GetType();
object res =
tipoCalc.InvokeMember("Adicionar",
BindingFlags.InvokeMethod, null,
new object[] { 10, 20 });
ScriptObject calc = ObterCalculadora();
int soma = Convert.ToInt32(res); res = calc.Invoke("Adicionar", 10, 20);
object
int soma = Convert.ToInt32(res);
Tipado estaticamente dynamic calc = ObterCalculadora();
para ser dinâmico int sum = calc.Add(10, 20);
Coversão Invocação dinâmica
dinâmica do método
21. Covariância e contravariância
Principais novidades da linguagem C# 4
out = covariância
public interface IEnumerable<T> T>
IEnumerable<out
somente posições de
{
IEnumerator<T> GetEnumerator();
saída
}
Pode ser tratada como
menos específica
public interface IEnumerator<T> T>
IEnumerator<out
{
T Current { get; } IEnumerable<string> strings = ObterStrings();
bool MoveNext(); IEnumerable<object> objects = strings;
}
in = contravariância
somente posições de
public interface IComparer<T> T>
IComparer<in entrada
{
int Compare(T x, T y); Pode ser tratada como
} mais específica
IComparer<object> objComp = ObterComparer();
IComparer<string> strComp = objComp;
23. TAP
Principais novidades da linguagem C# 5
Task-based Asynchronous Pattern
Novo padrão de programação
assíncrona no .NET Framework
Baseado nos tipos Task e Task<TResult>
do namespace System.Threading.Tasks
Implementado por um único método
NomeOperacaoAsync
Deve retornar Task ou Task<TResult>, baseado
no tipo de retorno void ou TResult,
respectivamente, do método síncrono
correspondente (NomeOperacao)
Se a classe já tiver um método
NomeOperacaoAsync, então deve-se
usar NomeOperacaoTaskAsync
24. Versão assíncrona via TAP
Principais novidades da linguagem C# 5
Versão síncrona de uma operação
TRetorno NomeOperacao(TParam1 p1, TParam2 p2);
Versão assíncrona da operação
síncrona segundo o padrão TAP
Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2);
Opcionais: cancelamento e progresso
Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2
[, CancellationToken cancellationToken]
Cancelamento
[, IProgress<T> progress]);
Progresso
25. Funções assíncronas
Principais novidades da linguagem C# 5
Tipos de retorno das funções
assíncronas
Deve ser void, Task ou Task<TResult>
Avaliação de funções assíncronas
Inicialmente idêntica a uma função
síncrona
Quando atinge uma expressão await, a
função assíncrona deve retornar
imediatamente ao seu chamador
Se a função assíncrona não for void,
um objeto Task ou Task<TResult>
será retornado para o chamador
26. Windows Runtime
Principais novidades da linguagem C# 5
Windows Runtime
Nova biblioteca da próxima versão do
Windows projetada para ser usada com
JavaScript, C#, Visual Basic e C++
Modelo de programação assíncrona
Interface IAsyncOperation<T>
O compilador automaticamente
transforma código normal em uma
máquina de estado de callback
27. async e await
Principais novidades da linguagem C# 5
O suporte a funções assíncronas
será incorporado à linguagem C# 5
Novas palavras-chaves: async e await
A palavra-chave await é usada para
marcar chamadas assíncronas
Dispensa a criação de funções de callback
A palavra-chave async deve estar
na assinatura de funções que
fazem chamadas assíncronas
await somente pode ser usada
na chamada de funções com
async na assinatura
28. async e await
Principais novidades da linguagem C# 5
async Task<decimal> calcularVendasAsync(string arquivo)
{
using (TextReader leitor = new StreamReader(arquivo))
{
string linha = null;
decimal total = 0M;
while ((linha = await leitor.ReadLineAsync()) != null)
{
string[] campos = linha.Split(';');
total += decimal.Parse(campos[campos.Length - 1]);
}
return total;
}
}
30. Compiler-as-a-Service (CaaS)
Principais novidades do projeto Roslyn
Classe
Laço
Meta-programação public Classe1 Ler-Avaliar-Imprimir
Campo
Modelo de objetos Incorporação de
da linguagem private campo1
DSL (Domain
string Specific Language)
Código-fonte Assembly
Código-fonte Assembly
.NET
Código-fonte Compilador Assembly
.NET
.NET
31. APIs para o CaaS
Principais novidades do projeto Roslyn
Edit and Continue
Go To Definition
Extract Method
Completion List
Object Browser
Signature Help
Navigate To
References
Quick Info
Formatter
Outlining
Colorizer
Rename
Find All
Serviços
da
linguagem
APIs do
compilador
Symbols Binding and
Pipeline do Syntax Symbol IL
Emit
Parser Binder
Flow Analysis
compilador Tree API API
Metadata Emitter
API
Import
APIs
32. Conclusão
A linguagem C# está em evolução constante
A evolução da linguagem C#
C# 1.0 em fevereiro de 2002 (.NF 1.0)
C# 2.0 em novembro de 2005 (.NF 2.0)
C# 3.0 em novembro de 2007 (.NF 3.5)
C# 4 em abril de 2010 (.NF 4)
C# 5 em 2012 (.NF 4.5)
Suporte ao Windows Runtime
Facilidade na programação assíncrona
Projeto Roslyn
Compiler-as-a-Service (CaaS)
Visual Studio Roslyn CTP
Previsão: meados de outubro/2011
33. Conteúdo Relacionado
Visual Studio Asynchronous Programming
msdn.microsoft.com/vstudio/async
What's New for Visual C# in
Visual Studio 11 Developer Preview
go.microsoft.com/fwlink/?LinkId=228087
MSDN Webcast: C# 5 – Task-based
Asynchronous Pattern (TAP), async e await
https://msevents.microsoft.com/CUI/EventDetail.aspx?
EventID=1032477469
34. Palestras Relacionadas
DEV304 – C# e Visual Basic Future: Async
Made Simple
Giovanni Bassi (29/09 18:40 às 19:50)
DEV310 – Visual Studio vNext a nova geração
Brian Keller, Rodrigo de Carvalho (29/09 11:20 às 12:30)
WEB302 – Presente e futuro da linguagem de
programação JavaScript
Rogério Moraes de Carvalho (29/09 18:40 às 19:50)
35. Get the free mobile app for your phone
http:/ / gettag.mobi
http://technet.microsoft.com/pt-br
Get the free mobile app for your phone
http:/ / gettag.mobi
http://msdn.microsoft.com/pt-br
36. Não esqueça de
preencher sua avaliação
online
www.teched.com.br/avaliacao
Get the free mobile app for your phone
http:/ / gettag.mobi