Visual Studio 2010 e C# 4.0Carlos dos Santoscds@cds-software.com.brBlog: www.carloscds.netTwitter: @cdssoftwareMicrosoft MVP C#CDS Informática Ltda. Microsoft Gold Certified Partner Microsoft Visual Studio Team System Inner Circle Partner
AgendaUm pouco de história...Novidades do Visual Studio 2010ObjetosTipadosDinamicamenteParâmetrosOpcionais e NomeadosProgramação ParalelaEntity Framework 4WPFSilverlight
Um pouco de história…SP13.53.0.NET 1.0.NET 1.1.NET 2.0.NET 4200213 de Fevereiro20033 de Abril2008 CTP2005-08CLR 1.0CLR 1.1CLR 2.0CLR 4
O que é a plataforma .NetWPFWin FormsDLRASP.NETWCFE muito mais!LINQBase Class LibrariesCLRJIT & NGENGarbage CollectorSecurity ModelException HandlingLoader & Binder
Quais são as novidades?Breakpoint GroupingVisual EnhancementsDynamic Data ToolingWPF-based EditorBreakpoint LabelingCall HierarchyImproved WPF ToolingHistorical DebuggingInline Call TreeQuick SearchConcurrency ProfilerBreakpoint Import/ExportDocument Map MarginParallel Stacks WindowImproved Multi-MonitorParallel Tasks WindowExtensible Test RunnerGenerate From UsageHighlight ReferencesClick-Once Enchacements for OfficeWeb DeploySharePoint ToolingMinidump DebuggingJQueryIntellisense64-bit Mixed-ModeHTML SnippetsWeb.config TransformationCode ContractsParallel ExtensionsBigIntegerVariance AnnotationsTuplesDLRSortedSetF#Memory Mapped FilesRegistry ImprovementsGlobalization 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
MEFProgramaçãoDinâmica .NETIronPythonIronRubyC#VB.NETOutros…Dynamic Language RuntimeExpression TreesDynamic DispatchCall Site CachingPythonBinderRubyBinderCOMBinderJavaScriptBinderObjectBinder
Entendendo o DynamicTipossão “estaticamentetipadoscomodinâmicos”Tipo dinâmicos são System.Object (cuidado com boxing e unboxing)Tipos dinâmicos se propagam nas chamadasTipo dinâmicos não possuem checagem em tempo de compilação e nem Intelisence
Como o Dynamic funciona:CLRCOM BinderExpression TreeIronPython BinderExeCompileRunBind callC# Runtime BinderDynamic CallDelegateDLRCache…
ObjetosTipadosDinamicamenteCalculator calc = GetCalculator();int sum = calc.Add(10, 20);object calc = GetCalculator();TypecalcType = calc.GetType();object res = calcType.InvokeMember("Add",BindingFlags.InvokeMethod, null,newobject[] { 10, 20 });int sum = Convert.ToInt32(res);ScriptObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);Estaticamentetipadocomodinâmicodynamic calc = GetCalculator();int sum = calc.Add(10, 20);Invocaçãodinâmica de métodoConversãodinâmica
ObjetosTipadosDinamicamenteTipoem tempo de compilação:dynamicTipoem tempo de execução:System.Int32dynamic x = 1;dynamic y = "Hello";dynamic z = newList<int> { 1, 2, 3 };Quandooperandossãodynamic…Seleção do membroadiadopara tempo de execução
Em tempo de execução, ostipossãosubtituídos
 O tipoestáticoresultantedaoperação é dynamicObjetosTipadosDinamicamentepublic static class Math{   publicstaticdecimal Abs(decimal value);   publicstaticdouble Abs(double value);   publicstaticfloat Abs(float value);   publicstaticint Abs(int value);   publicstaticlong Abs(long value);   publicstaticsbyte Abs(sbyte value);   publicstaticshort Abs(short value);   ...}Métodoescolhidoem tempo de compilação: double Abs(double x)double x = 1.75;double y = Math.Abs(x);Métodoescolhidoem tempo de execução: double Abs(double x)dynamic x = 1.75;dynamic y = Math.Abs(x);Métodoescolhidoem tempo de execução:int Abs(int x)dynamic x = 2;dynamic y = Math.Abs(x);
ObjetosTipadosDinamicamentedemo
ParâmetrosOpcionais e NomeadosMétodo principalpublicStreamReaderOpenTextFile(    string path,    Encodingencoding,booldetectEncoding,intbufferSize);Overloads secundáriospublicStreamReaderOpenTextFile(    string path,    Encodingencoding,booldetectEncoding);publicStreamReaderOpenTextFile(    string path,    Encodingencoding);publicStreamReaderOpenTextFile(    string path);Chama o método principal com valores default

Visual Studio 2010 e C# 4

  • 1.
    Visual Studio 2010e C# 4.0Carlos dos Santoscds@cds-software.com.brBlog: www.carloscds.netTwitter: @cdssoftwareMicrosoft MVP C#CDS Informática Ltda. Microsoft Gold Certified Partner Microsoft Visual Studio Team System Inner Circle Partner
  • 2.
    AgendaUm pouco dehistória...Novidades do Visual Studio 2010ObjetosTipadosDinamicamenteParâmetrosOpcionais e NomeadosProgramação ParalelaEntity Framework 4WPFSilverlight
  • 3.
    Um pouco dehistória…SP13.53.0.NET 1.0.NET 1.1.NET 2.0.NET 4200213 de Fevereiro20033 de Abril2008 CTP2005-08CLR 1.0CLR 1.1CLR 2.0CLR 4
  • 4.
    O que éa plataforma .NetWPFWin FormsDLRASP.NETWCFE muito mais!LINQBase Class LibrariesCLRJIT & NGENGarbage CollectorSecurity ModelException HandlingLoader & Binder
  • 5.
    Quais são asnovidades?Breakpoint GroupingVisual EnhancementsDynamic Data ToolingWPF-based EditorBreakpoint LabelingCall HierarchyImproved WPF ToolingHistorical DebuggingInline Call TreeQuick SearchConcurrency ProfilerBreakpoint Import/ExportDocument Map MarginParallel Stacks WindowImproved Multi-MonitorParallel Tasks WindowExtensible Test RunnerGenerate From UsageHighlight ReferencesClick-Once Enchacements for OfficeWeb DeploySharePoint ToolingMinidump DebuggingJQueryIntellisense64-bit Mixed-ModeHTML SnippetsWeb.config TransformationCode ContractsParallel ExtensionsBigIntegerVariance AnnotationsTuplesDLRSortedSetF#Memory Mapped FilesRegistry ImprovementsGlobalization data updated to unicode 5.1
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    MEFProgramaçãoDinâmica .NETIronPythonIronRubyC#VB.NETOutros…Dynamic LanguageRuntimeExpression TreesDynamic DispatchCall Site CachingPythonBinderRubyBinderCOMBinderJavaScriptBinderObjectBinder
  • 24.
    Entendendo o DynamicTipossão“estaticamentetipadoscomodinâmicos”Tipo dinâmicos são System.Object (cuidado com boxing e unboxing)Tipos dinâmicos se propagam nas chamadasTipo dinâmicos não possuem checagem em tempo de compilação e nem Intelisence
  • 25.
    Como o Dynamicfunciona:CLRCOM BinderExpression TreeIronPython BinderExeCompileRunBind callC# Runtime BinderDynamic CallDelegateDLRCache…
  • 26.
    ObjetosTipadosDinamicamenteCalculator calc =GetCalculator();int sum = calc.Add(10, 20);object calc = GetCalculator();TypecalcType = calc.GetType();object res = calcType.InvokeMember("Add",BindingFlags.InvokeMethod, null,newobject[] { 10, 20 });int sum = Convert.ToInt32(res);ScriptObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);Estaticamentetipadocomodinâmicodynamic calc = GetCalculator();int sum = calc.Add(10, 20);Invocaçãodinâmica de métodoConversãodinâmica
  • 27.
    ObjetosTipadosDinamicamenteTipoem tempo decompilação:dynamicTipoem tempo de execução:System.Int32dynamic x = 1;dynamic y = "Hello";dynamic z = newList<int> { 1, 2, 3 };Quandooperandossãodynamic…Seleção do membroadiadopara tempo de execução
  • 28.
    Em tempo deexecução, ostipossãosubtituídos
  • 29.
    O tipoestáticoresultantedaoperaçãoé dynamicObjetosTipadosDinamicamentepublic static class Math{ publicstaticdecimal Abs(decimal value); publicstaticdouble Abs(double value); publicstaticfloat Abs(float value); publicstaticint Abs(int value); publicstaticlong Abs(long value); publicstaticsbyte Abs(sbyte value); publicstaticshort Abs(short value); ...}Métodoescolhidoem tempo de compilação: double Abs(double x)double x = 1.75;double y = Math.Abs(x);Métodoescolhidoem tempo de execução: double Abs(double x)dynamic x = 1.75;dynamic y = Math.Abs(x);Métodoescolhidoem tempo de execução:int Abs(int x)dynamic x = 2;dynamic y = Math.Abs(x);
  • 30.
  • 31.
    ParâmetrosOpcionais e NomeadosMétodoprincipalpublicStreamReaderOpenTextFile( string path, Encodingencoding,booldetectEncoding,intbufferSize);Overloads secundáriospublicStreamReaderOpenTextFile( string path, Encodingencoding,booldetectEncoding);publicStreamReaderOpenTextFile( string path, Encodingencoding);publicStreamReaderOpenTextFile( string path);Chama o método principal com valores default
  • 32.
    ParâmetrosOpcionais e NomeadosParâmetrosopcionaispublicStreamReaderOpenTextFile( string path, Encodingencoding,booldetectEncoding,intbufferSize);publicStreamReaderOpenTextFile( string path, Encodingencoding = null,booldetectEncoding = true,intbufferSize = 1024);ArgumentonomeadoOpenTextFile("foo.txt", Encoding.UTF8);OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096);ArgumentosavaliadosnaordemescritaArgumentosnomeadospodemapareceremqualquerordemArgumentosnomeadosdevemvirporúltimoOpenTextFile(bufferSize: 4096, path: "foo.txt",detectEncoding: false);Argumentosnão-opcionais DEVEM ser especificados
  • 33.
    Programação ParalelaAproveitar acapacidade dos processadores com váriosnúcleosSuporte do .Net Framework 4.0:Parallel For / ForEachTask Parallel Library (TPL)System.ThreadingSystem.Treading.TaskParallel Linq (PLINQ)Estururas de dados em: System.Collections.Concurrent
  • 34.
  • 35.
    Programação Orientada aTeste (TDD)Escrevaos testes antes do códigoAprovar, RefactorizarAjuda do IntellisenseGeração do Código da ClasseGeração dos Metodos
  • 36.
  • 37.
    Entity Framework 4ADO.NETAPIORM APIEntity ProviderConnectionObjectContextCommandObjectQueryModeloConceitualDataReaderMapeamentoModeloFísicoSQL ProviderOracle Provider...
  • 38.
    ADO.NET x EntityFrameworkEntity FrameworkADO.Net
  • 39.
    Entity Framework 4.0Ferramentade designer melhorada (VS2010)Maiscontrole e flexibilidade;POCO (Plan Old CLR Objects - persistence Ignorance);Desenvolvimento N-Tier (emcamadas);Lazy Loading (dados carregadospordemanda);
  • 40.
  • 41.
    WPF Desenvolvaaplicações comvisual incrívelTotal liberdadepara o designerIntegração entre o designer e o desenvolvedorFerramentasespecíficaspara o designer: Expression BlendVisual criadousando XAML
  • 42.
  • 43.
    SilverlightAplicações web comvisual incrívelPoder do XAML aplicado a webSmooth Streaming – altaqualidadenosvídeos(http://www.iis.net/media/experiencesmoothstreaming)Aceleração via GPU (usaprocessamento local do usuário)Instalação no client (out of browser)Obtenha feedback do cliente sem escrever a aplicação (Sketch Flow)
  • 44.
  • 45.
  • 46.
    Consume firstdevelopment
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
    LINQ debuggingO quemais?Managed Extensibility Framework?WPF / SilverlightADO.NET Data ServicesAzureDomain Specific LanguageVisual Studio Team System
  • 55.
    Links ÚteisC# 4.0Samples and Whitepaperhttp://code.msdn.microsoft.com/csharpfutureVisual C# Developer Centerhttp://csharp.netSharpCodehttp://www.sharpcode.com.brMeu Bloghttp://www.carloscds.net
  • 56.
    Querusar a plataforma.Net?Temos consultoria especializada em treinamento para equipes de desenvolvimento;
  • 57.
  • 58.
    Migração de PHPpara Asp.Net;
  • 59.
  • 60.
    Implementação de VisualStudio Team System;
  • 61.
    Desenvolvimento Asp.Net, Silverlight,Windows Mobile; www.cds-software.com.br
  • 62.
    Perguntas ?Carlos dosSantoscds@cds-software.com.br www.carloscds.net@cdssoftware

Notas do Editor

  • #4 A primeira versão foi lançada em 2002, para Windows 98, Me, NT 4.0, 2000, and XP;A versão 1.1foi a primeiragrandeatualização da plataforma, lançadaemconjunto com o Visual Studio 2003, e jáfazendo parte do Windows Server 2003. Inúmerasmodificações, inclusive lançamento de umaversãoparadispositivospequenos, o .NET Compact Framework.A versão 2.0 foilançadaem 2005/2006, junto com SQL Server 2005, Biztalk 2006, etc. - Novo CLR - Generics - Temas, skins, webparts - classes parciais, métodosanonimos, etcA versão 3.0 funcionamaiscomoumaatualização, semgrandesmudançasarquiteturais, utilziando o CLR passado. (novembro 2006) - WPF - WCF - WF - Windows CardspaceVersão 3.5: Novembro de 2007 - LINQ - Métodos de extensão - ASP.NET AJAX juntoSP1 do 3.5: Agosto 2008 - Entity Framework - ADO.NET Data Services - ASP.NET MVC4.0: Anuncio em setembro 2008Public Beta em maio 2009ParallelLinguagens DinâmicasCode ContractsOsloFevereiro de 2010: RC
  • #7 Expression trees – árvores de expressões Dynamic Dispatch – resolução de métodos em tempo de execução, utiliza cache de chamadas se houberSite Caching – cache das chamadas
  • #10 Diferença entre dynamic e varVar é conhecido em tempo de compilaçãoDynamic é como o tipo object, resolvido somente em runtimeCuidado com uso excessivo de dynamic – ele cauxa box e unboxing, ou seja muito overhead no processador
  • #11 If you would like to host your demo on the Virtual Server, please use the myVPC demo slide, not this slide.
  • #12 Mostrar Debug Windows Parallel – break point
  • #13 If you would like to host your demo on the Virtual Server, please use the myVPC demo slide, not this slide.
  • #14 Mostrar Debug Windows Parallel – break point
  • #25 Mostrar Debug Windows Parallel – break point
  • #27 Mostrar Debug Windows Parallel – break point