Post on 10-May-2015
Visual Studio 2010 e C# 4.0
Carlos dos Santoscds@cds-software.com.br
Blog: www.carloscds.netTwitter: @cdssoftware
Microsoft MVP C#CDS Informática Ltda.
Microsoft Gold Certified Partner Microsoft Visual Studio Team System Inner Circle Partner
*Agenda
*Um pouco de história...
*Novidades do Visual Studio 2010
*Objetos Tipados Dinamicamente
*Parâmetros Opcionais e Nomeados
*Programação Paralela
*Entity Framework 4
*WPF
*Silverlight
.NET 1.0 .NET 1.1 .NET 2.0
3.0
3.5
.NET 4
200213 de Fevereiro
20033 de Abril
2008 CTP2005-08
CLR 1.0 CLR 1.1 CLR 2.0 CLR 4
SP1
*Um pouco de história…
*O que é a plataforma .Net
Base Class Libraries
CLRJIT & NGEN
Garbage Collector
Security Model
Exception Handling
Loader & Binder
WPF Win Forms DLR ASP.NET WCF E muito
mais!LINQ
*Quais são as novidades?• Breakpoint Grouping• Visual Enhancements• Dynamic Data Tooling• WPF-based Editor• Breakpoint Labeling• Call Hierarchy• Improved WPF Tooling• Historical Debugging• Inline Call Tree• Quick Search• Concurrency Profiler• Breakpoint
Import/Export• Document Map Margin• Parallel Stacks Window• Improved Multi-Monitor• Parallel Tasks Window• Extensible Test Runner• Generate From Usage
• Highlight References• Click-Once Enchacements for
Office• Web Deploy• SharePoint Tooling• Minidump Debugging• JQuery Intellisense• 64-bit Mixed-Mode• HTML Snippets• Web.config Transformation• Code Contracts• Parallel Extensions• BigInteger• Variance Annotations• Tuples• DLR• SortedSet• F#• Memory Mapped Files• Registry Improvements
• Globalization data updated to unicode 5.1• Resource Managed Improvements• Compression Improvements• PLINQ• Parallel Task• Velocity• WCF4• WF4• WPF4• ADO.NET Data Services 1.5• ASP.NET Ajax 4.0• ASP.NET MVC• ASP.NET WebForms 4.0• CLR4• C# 4.0• VB10• MEF• Entity Framework 4.0• MEF
PythonBinder
RubyBinder
COMBinder
JavaScript
Binder
ObjectBinder
*Programação Dinâmica .NET
Dynamic Language Runtime
Expression TreesDynamic Dispatch
Call Site Caching
IronPython
IronRuby C# VB.NET Outros…
* Entendendo o Dynamic
*Tipos são “estaticamente tipados como dinâmicos”
*Tipo dinâmicos são System.Object (cuidado com boxing e unboxing)
*Tipos dinâmicos se propagam nas chamadas
*Tipo dinâmicos não possuem checagem em tempo de compilação e nem Intelisence
*Como o Dynamic funciona:
CLR
ExeCompile
RunBind call
Expression Tree
Dynamic Call
Delegate
DLR Cac
he
COM Binder
IronPython Binder
C# Runtime Binder
…
*Objetos Tipados Dinamicamente
Calculator calc = GetCalculator();int sum = calc.Add(10, 20);
object calc = GetCalculator();Type calcType = calc.GetType();object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });int sum = Convert.ToInt32(res);
ScriptObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);
dynamic calc = GetCalculator();int sum = calc.Add(10, 20);
Estaticamente tipado como
dinâmico
Invocação dinâmica de
método
Conversão dinâmica
*Objetos Tipados Dinamicamente
dynamic x = 1;dynamic y = "Hello";dynamic z = new List<int> { 1, 2, 3 };
Tipo em tempo de compilação:
dynamic
Tipo em tempo de execução:
System.Int32
Quando operandos são dynamic…• Seleção do membro adiado para tempo de execução• Em tempo de execução, os tipos são subtituídos• O tipo estático resultante da operação é dynamic
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); public static sbyte Abs(sbyte value); public static short Abs(short value); ...}
double x = 1.75;double y = Math.Abs(x);
dynamic x = 1.75;dynamic y = Math.Abs(x);
*Objetos Tipados Dinamicamente
Método escolhido em tempo de compilação:
double Abs(double x)
Método escolhido em tempo de
execução: double Abs(double
x)
dynamic x = 2;dynamic y = Math.Abs(x);
Método escolhido em tempo de
execução: int Abs(int x)
12
*Objetos Tipados Dinamicamente
demo
*Parâmetros Opcionais e Nomeados
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding);
public StreamReader OpenTextFile( string path, Encoding encoding);
public StreamReader OpenTextFile( string path);
Método principal
Overloads secundários
Chama o método principal com
valores default
*Parâmetros Opcionais e Nomeados
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);
public StreamReader OpenTextFile( string path, Encoding encoding = null, bool detectEncoding = true, int bufferSize = 1024);
Parâmetros opcionais
OpenTextFile("foo.txt", Encoding.UTF8);OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096);
Argumento nomeado
OpenTextFile( bufferSize: 4096, path: "foo.txt", detectEncoding: false);
Argumentos nomeados devem
vir por último
Argumentos não-opcionais DEVEM ser especificados
Argumentos avaliados na ordem
escrita
Argumentos nomeados podem
aparecer em qualquer ordem
*Programação Paralela
*Aproveitar a capacidade dos processadores com vários núcleos
*Suporte do .Net Framework 4.0:* Parallel For / ForEach
* Task Parallel Library (TPL)* System.Threading
* System.Treading.Task
* Parallel Linq (PLINQ)
* Estururas de dados em: * System.Collections.Concurrent
16
*Programação Paralela
demo
*Programação Orientada a Teste (TDD)
*Escreva os testes antes do código
*Aprovar, Refactorizar
*Ajuda do Intellisense
*Geração do Código da Classe
*Geração dos Metodos
18
*Test Driven Development
demo
*Entity Framework 4
SQL Provider Oracle Provider ...
Entity Provider
Modelo Conceitual
Modelo Físico
Mapeamento
ADO.NET API ORM API
Connection
Command
DataReader
ObjectContext
ObjectQuery
*ADO.NET x Entity Framework
ADO.Net
Entity Framework
*Entity Framework 4.0
*Ferramenta de designer melhorada (VS2010)
*Mais controle e flexibilidade;
*POCO (Plan Old CLR Objects - persistence Ignorance);
*Desenvolvimento N-Tier (em camadas);
*Lazy Loading (dados carregados por demanda);
22
*Entity Framework 4
demo
*WPF *Desenvolva aplicações com visual incrível
*Total liberdade para o designer
*Integração entre o designer e o desenvolvedor
*Ferramentas específicas para o designer: Expression Blend
*Visual criado usando XAML
24
*WPF
demo
*Silverlight*Aplicações web com visual incrível
*Poder do XAML aplicado a web
*Smooth Streaming – alta qualidade nos vídeos (http://www.iis.net/media/experiencesmoothstreaming)
*Aceleração via GPU (usa processamento local do usuário)
*Instalação no client (out of browser)
*Obtenha feedback do cliente sem escrever a aplicação (Sketch Flow)
26
*Silverlight
demo
*Produtividade
Entendendo
Navegando
Testando Depurando
Modificando
Escrevendo
Analyze relationships and structure
Quick information
Symbol navigation
File navigation
Code generation
Consume first development
Refactor code
Organize code
Stepping behavior
LINQ debugging
Unit testing
TDD
*O que mais?
*Managed Extensibility Framework?
*WPF / Silverlight
*ADO.NET Data Services
*Azure
*Domain Specific Language
*Visual Studio Team System
*Links Úteis
C# 4.0 Samples and Whitepaper
http://code.msdn.microsoft.com/csharpfutureVisual C# Developer Center
http://csharp.net
SharpCode
http://www.sharpcode.com.br
Meu Blog
http://www.carloscds.net
*Quer usar a plataforma .Net ?
• Temos consultoria especializada em treinamento para equipes de desenvolvimento;
• Migração de Delphi para C#;• Migração de PHP para Asp.Net;• Migraçao de WebServices para WCF;• Implementação de Visual Studio Team System;• Desenvolvimento Asp.Net, Silverlight,
Windows Mobile;
www.cds-software.com.br
Perguntas ?
Carlos dos Santoscds@cds-software.com.br
www.carloscds.net
@cdssoftware