dynamic types no c# 4.0

Post on 21-May-2015

2.718 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Apresentação sobre tipos dinâmicos no .NET 4 e c# 4.0.A apresentação foi feita com uma série de demos, baixe-as no site: http://viniciusquaiato.com para compreender melhor.

TRANSCRIPT

Dynamic TypesProgramação dinâmica no C# 4.0

Vinicius Quaiato http://viniciusquaiato.com

Agenda Programação dinâmica DLR – Dynamic Language Runtime IronRuby e IronPython

Demonstração

Dynamic no C# 4.0 Demonstração

ExpandoObject Demonstração

DynamicObject Demonstração

Vinicius Quaiato - http://viniciusquaiato.com

Is .NET becoming impossible?

Vinicius Quaiato - http://viniciusquaiato.com

Programação Dinâmica Linguagens dinâmicas foram populares

na década de 80; Linguagens versáteis, utilizadas

principalmente para script programming;

Não existe verificação de tipo; Recomeçaram a ganhar força nos anos

2000 devido a grande demanda web.

Vinicius Quaiato - http://viniciusquaiato.com

Programação Dinâmica

Vinicius Quaiato - http://viniciusquaiato.com

O que é isso?!

Vinicius Quaiato - http://viniciusquaiato.com

Linguagens Dinâmicas PHP, Ruby e Python dominam este

mercado; São menos verbosas e complicadas que

as linguagens estaticamente tipadas; Alterações e Refactorings não exigem

recompilações; É necessário ter cuidado e atenção pois

não há compilador para alertar erros.

Vinicius Quaiato - http://viniciusquaiato.com

DLR – Dynamic Language Runtime Código .NET é compilado e

estaticamente tipado; DLR é um novo “pedaço” do

framework .NET; Faz uma espécie de “meio de campo”

entre linguagens e capacidades dinâmicas e linguagens estaticamente tipadas

Vinicius Quaiato - http://viniciusquaiato.com

DLR – Dynamic Language Runtime

Vinicius Quaiato - http://viniciusquaiato.com

Vinicius Quaiato - http://viniciusquaiato.com

IronRuby e IronPython Iron – Implementation Running on .NET; São implementações fidedignas das

linaguagens rodando no .NET; IronPython já está em sua versão 2.6; IronRuby está em RC, com cerca de

86% da RubySpec implementada;

Vinicius Quaiato - http://viniciusquaiato.com

IronRuby e IronPython Linguagens simples e poderosas; Possível desenvolver para web, console,

desktop, etc; Há grande suporte de suas comunidades; Proporciona mais opções dentro do

framework; Ainda não há suporte de intellisense e

templates no Visual Studio.

Vinicius Quaiato - http://viniciusquaiato.com

Demonstração Console Interativo IronRuby Asp.Net MVC com IronRuby

Vinicius Quaiato - http://viniciusquaiato.com

Vinicius Quaiato - http://viniciusquaiato.com

O tipo Dynamic Novo tipo introduzido no .NET 4.0; Dynamic pode ser TUDO; É um tipo estático, porém diz ao

compilador para dar “by pass” nas validações estáticas;

É criado com a palavra reservada dynamic;

As operações realizadas são avaliadas somente em tempo de execução.

Vinicius Quaiato - http://viniciusquaiato.com

O tipo Dynamic Dynamic nos obriga a ser mais

atencioso; Não há suporte para operações pelo

intellisense; Erros em tempo de execução podem

acontecer; É uma deixa para largarmos de ser

preguiçosos.

Vinicius Quaiato - http://viniciusquaiato.com

Por que usar dynamic? Algumas aplicações talvez nunca

precisem usar dynamic; A criação de frameworks, APIs e DSLs

podem ser facilitadas com seu uso; A criação de DTOs pode ser feita com

dynamic; Na criação e manipulação de

dados/objetos e situações que não são previsíveis.

Vinicius Quaiato - http://viniciusquaiato.com

Por que usar dynamic? Existem diversos cenários onde usar, e

as validações em tempo de execução não são motivo para não usar;

A sintaxe “string-indexer-based” corre os mesmos riscos: var dataTable = new DataTable(); var valor = dataTable[0][“Coluna”];

Vinicius Quaiato - http://viniciusquaiato.com

Por que usar dynamic? Facilita a utilização de técnicas como

Reflection e COM Interop;

Vinicius Quaiato - http://viniciusquaiato.com

Por que usar dynamic? Permite a integração com linguagens

dinâmicas com IronPython e IronRuby; É possível consumir classes e executar

código escrito nestas linguagens dentro do C#;

Se há uma boa biblioteca em outra linguagem, por que não usar?

Vinicius Quaiato - http://viniciusquaiato.com

Demonstração Consumindo e criando código IronRuby

dentro do C# 4.0

Vinicius Quaiato - http://viniciusquaiato.com

Vinicius Quaiato - http://viniciusquaiato.com

ExpandoObject Representa um objeto que pode ter

propriedades e métodos adicionados e/ou removidos dinamicamente;

Seus membros são avaliados em runtime; Sua sintaxe é mais amigável do que

trabalhar com indexers (syntax sugar); Pode funcionar de maneira case insensitive; Expandoobjects podem ser compartilhados

entre linguagens do DLRVinicius Quaiato -

http://viniciusquaiato.com

ExpandoObject Implementa as seguintes interfaces;

IDynamicMetaObjectProvider IDictionary<string, object> ICollection<KeyValuePair<string,

object>> IEnumerable<KeyValuePair<string,

object>> IEnumerable, INotifyPropertyChanged

Vinicius Quaiato - http://viniciusquaiato.com

Demonstração Criando ExpandoObject

Vinicius Quaiato - http://viniciusquaiato.com

Vinicius Quaiato - http://viniciusquaiato.com

DynamicObject Diferente de ExpandoObject a classe

DynamicObject deve ser herdada; Provê meios de decidir como os

métodos e propriedades serão executados caso não existam;

Uma classe que herda de DynamicObject pode possuir membros;

Vinicius Quaiato - http://viniciusquaiato.com

DynamicObject Possui uma série de métodos que

podem ser sobrescritos, alguns deles são:

Vinicius Quaiato - http://viniciusquaiato.com

Método DescriçãoTryGetMember Provê uma implementação para operações que obtém

valores de propriedades.

TrySetMember Provê uma implementação para operações que alteram valores de propriedades.

TryInvokeMember

Provê uma implementação para operações de chamada de métodos.

TryGetIndex Provê uma implementação para operaçoes de acesso à índices.

TrySetIndex Provê uma implementação para operações que alteram valores de índices.

Demonstração Criando e trabalhando com

DynamicObject

Vinicius Quaiato - http://viniciusquaiato.com

Considerações Pode ser que sua aplicação/projeto não precise de

dynamic agora, mas dizer que nunca precisarão pode ser um erro;

Os avanços do .NET nesta nova versão são grandes, e já surgem produtos utilizando estas novas features dinâmicas;

Tarefas que seriam complexas e “feias” de serem feitas com C# 3.5- podem ser feitas de forma simples e eficiente com dynamic à partir de agora;

Com a integração do Ruby e Python a comunidade .NET começa a avançar ainda mais, o que é bom para o framework e para o mercado;

Vinicius Quaiato - http://viniciusquaiato.com

Links e Referências Documentação do tipo dynamic

http://tinyurl.com/NetDynamicDoc Documentação ExpandoObject

http://tinyurl.com/NetExpandoDoc Documentação DynamicObject

http://tinyurl.com/NetDynamicObjDoc Documentação DLR – Dynamic Language Runtime

http://tinyurl.com/NetDLRDoc Posts sobre DynamicObject e ExpandoObject

http://viniciusquaiato.com/blog/index.php/tag/dynamic IronRuby CodePlex

http://ironruby.codeplex.com/ IronPython CodePlex

http://ironpython.codeplex.com/Vinicius Quaiato -

http://viniciusquaiato.com

top related