.NET 4.0 Preview
da VS10 a C# 4.0




     Mauro Servienti
     Microsoft MVP - Visual C#
     Software Mason @ Managed Designs

     http://blogs.ugidotnet.org/topics
     mauro.servienti@manageddesigns.it
Agenda
 Visual Studio 2010
 C# & VB.Net
 Framework 4.0
Certo non c’è “Linq”, ma...
 Nuovo ambiente di sviluppo;
 Nuovo TFS;
 +296 classi;
 Nuovo CLR, con tanto di supporto per
  l’hosting side-by-side;
 Nuovo linguaggio: F#
...e poi
   Nuove versioni per:
    Wpf, Wcf, Wf, Asp.net, Entity Framework e
    pure per il “defunto” Linq2Sql;
   Nuovi attori: Parallel Library e Plinq, Code
    Contracts;
   Integrazione/diffusione di xaml e... morte di
    xoml;
   Nuove feature per i “vecchi” linguaggi;
   Nuovi strumenti di refactoring;
   Nuovi designer;
Visual Studio 2010
 Multi-targeting: 2.0 -> 4.0;
 Nuovi strumenti di Refactoring orientati
  anche al TDD;
 Nuovi designer;
     Sequence Diagram;
     Layer Diagram e Architecture Explorer
 Code dependencies;
 Commenti nel debugger;
 Historical Debugger;
 Post-mortem debug;
Visual Studio 2010
 Code Hierarchy;
 Nuova dialog Choose Toolbox Items:
     Filtri, suddivisa in categorie, sempre lenta...
   Wpf, wpf, wfp e ancora wpf;
     IDE “quasi” completamente riscritto in wpf;
     “Piena” retrocompatibilità con i package e gli
      add-in;
     “Cider”, l’intellisense per xaml e la nuova
      PropertyGrid;
     Wpf Tree Visualizer;
Visual Studio 2010
   Web.config transformation;
     Solo per deploy
     Solo per “Web”... Forse...
      ○ Usa MS Build

   MEF & Extensions
     Microsoft Extensibility Framework != IoC
     Nuovo Extension Manager
     “Pluggabilità” dell’IDE rivoluzionaria;
Visual Studio 2010 a first look
C# vs VB... new stuff
    Optional and Named      Multiline Lambdas;
     Parameters              Implicit Line Continuation;
                             Auto-implemented
    Safe Co- & Contra-       Properties;
     variance                Collection Initializers;
    Dynamically Typed       Array Literals;
     Objects                 Nullable Optional
                              Parameters;
    Improved COM            Co- & Contra-variance
     Interoperability        Interop with Dynamic
                              Languages
                             Compiling without PIAs;

C#                        VB.Net
Optional and Named
Parameters




 Vale anche per i metodi;
 IMVHO viola l’incapsulamento;
Co-variance

              Fx 2.0




              Fx 4.0
Contra-variance



Fx 2.0




                  Fx 4.0
Dynamically Typed Objects
     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);
Dynamically Typed Objects
 Il DLR supporta la creazione di oggetti
  C# no;
 Non sono supportati gli extension
  methods;
 Non possono essere usati come
  parametri di una chiamata oggetti
  Expression;
Dynamically Typed Objects
COM Interop news
   La firma delle API COM passa da Object
    a dynamic:
     ((Excel.Range)excel.Cells[1, 1]).Value;
     excel.Cells[1, 1].Value;
 No-PIA: A runtime le informazioni
  presenti, e necessarie a design-
  time, vengono inglobate dal
  compilatore, quindi le/i PIA non vengono
  più caricati;
 No-ref: COM ref != C# ref -> diventa onere
  del compilatore generare le variabili
  temporanee da passare “by reference”;
Framework
 Hosting API;
 Code Contracts & PEX;
 Parallel Library;
 TreadPool;
Hosting API

      2.0       3.0       3.5        4.0
     add-in    add-in    add-in     add-in

                3.5
                3.0
                                   .NET 4.0
              .NET 2.0


                   Processo Host
Code Contracts
   Sintassi per esplicitare i requisiti sui dati;
     Requires();
     RequiresAlways();
   Static Checker: controllo a compile time;
     (a parte per la
      B1, http://msdn.microsoft.com/en-
      us/devlabs/dd491992.aspx)
 Possibilità di fornire i contratti separati;
 Contract Invariance;
Code Contracts
Pre condizioni
    public MyMethod( String argument )
    {
      Contract.Requires( argument != null );
      …
    }

Post condizioni
   public string GetValue()
   {
     Contract.Ensures( Contract.Result<String>() != null );
     …
     return something;
   }
PEX
 Add-in per Visual Studio (anche 2008?)
 Genera un set mirato di unit-tests;
 Può sfruttare Code Contracts;
Multi-Core/Threading/Task...
 L’hardware ha preso la sua strada;
 Scrivere software che sfrutti più core è
  un’operazione complessa, troppo;

    Il focus del developer deve essere sul
     problema e non sull’infrastruttura che
         serve per risolvere il problema;
I nuovi attori
   Parallel LINQ (aka PLinq)
   Task Parallel Library:
     Task, Task<T>
     Parallel.For, Parallel.ForEach
     Parallel.Invoke
   Coordination Data Structures:
     System.Collections.Concurrent
     Primitive per la sincronizzazione
      ○ Barrier, CountdownEvent, etc.
   Unified Cancellation Model:
     CancelationToken, CancelationTokenSource;
AsParallel is the word <cit.>

  var q = from p in people.AsParallel()
          where p.Name == query.Name &&
                p.State == query.State &&
                p.Year >= yearStart &&
                p.Year <= yearEnd
          orderby p.Year ascending
          select p;
.Net 4.0 Preview @ UGIdotNet

.Net 4.0 Preview @ UGIdotNet

  • 2.
    .NET 4.0 Preview daVS10 a C# 4.0 Mauro Servienti Microsoft MVP - Visual C# Software Mason @ Managed Designs http://blogs.ugidotnet.org/topics mauro.servienti@manageddesigns.it
  • 3.
    Agenda  Visual Studio2010  C# & VB.Net  Framework 4.0
  • 4.
    Certo non c’è“Linq”, ma...  Nuovo ambiente di sviluppo;  Nuovo TFS;  +296 classi;  Nuovo CLR, con tanto di supporto per l’hosting side-by-side;  Nuovo linguaggio: F#
  • 5.
    ...e poi  Nuove versioni per: Wpf, Wcf, Wf, Asp.net, Entity Framework e pure per il “defunto” Linq2Sql;  Nuovi attori: Parallel Library e Plinq, Code Contracts;  Integrazione/diffusione di xaml e... morte di xoml;  Nuove feature per i “vecchi” linguaggi;  Nuovi strumenti di refactoring;  Nuovi designer;
  • 7.
    Visual Studio 2010 Multi-targeting: 2.0 -> 4.0;  Nuovi strumenti di Refactoring orientati anche al TDD;  Nuovi designer;  Sequence Diagram;  Layer Diagram e Architecture Explorer  Code dependencies;  Commenti nel debugger;  Historical Debugger;  Post-mortem debug;
  • 8.
    Visual Studio 2010 Code Hierarchy;  Nuova dialog Choose Toolbox Items:  Filtri, suddivisa in categorie, sempre lenta...  Wpf, wpf, wfp e ancora wpf;  IDE “quasi” completamente riscritto in wpf;  “Piena” retrocompatibilità con i package e gli add-in;  “Cider”, l’intellisense per xaml e la nuova PropertyGrid;  Wpf Tree Visualizer;
  • 9.
    Visual Studio 2010  Web.config transformation;  Solo per deploy  Solo per “Web”... Forse... ○ Usa MS Build  MEF & Extensions  Microsoft Extensibility Framework != IoC  Nuovo Extension Manager  “Pluggabilità” dell’IDE rivoluzionaria;
  • 10.
    Visual Studio 2010a first look
  • 11.
    C# vs VB...new stuff  Optional and Named  Multiline Lambdas; Parameters  Implicit Line Continuation;  Auto-implemented  Safe Co- & Contra- Properties; variance  Collection Initializers;  Dynamically Typed  Array Literals; Objects  Nullable Optional Parameters;  Improved COM  Co- & Contra-variance Interoperability  Interop with Dynamic Languages  Compiling without PIAs; C# VB.Net
  • 12.
    Optional and Named Parameters Vale anche per i metodi;  IMVHO viola l’incapsulamento;
  • 13.
    Co-variance Fx 2.0 Fx 4.0
  • 14.
  • 15.
    Dynamically Typed Objects 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);
  • 16.
    Dynamically Typed Objects Il DLR supporta la creazione di oggetti C# no;  Non sono supportati gli extension methods;  Non possono essere usati come parametri di una chiamata oggetti Expression;
  • 17.
  • 18.
    COM Interop news  La firma delle API COM passa da Object a dynamic:  ((Excel.Range)excel.Cells[1, 1]).Value;  excel.Cells[1, 1].Value;  No-PIA: A runtime le informazioni presenti, e necessarie a design- time, vengono inglobate dal compilatore, quindi le/i PIA non vengono più caricati;  No-ref: COM ref != C# ref -> diventa onere del compilatore generare le variabili temporanee da passare “by reference”;
  • 19.
    Framework  Hosting API; Code Contracts & PEX;  Parallel Library;  TreadPool;
  • 20.
    Hosting API 2.0 3.0 3.5 4.0 add-in add-in add-in add-in 3.5 3.0 .NET 4.0 .NET 2.0 Processo Host
  • 21.
    Code Contracts  Sintassi per esplicitare i requisiti sui dati;  Requires();  RequiresAlways();  Static Checker: controllo a compile time;  (a parte per la B1, http://msdn.microsoft.com/en- us/devlabs/dd491992.aspx)  Possibilità di fornire i contratti separati;  Contract Invariance;
  • 22.
    Code Contracts Pre condizioni public MyMethod( String argument ) { Contract.Requires( argument != null ); … } Post condizioni public string GetValue() { Contract.Ensures( Contract.Result<String>() != null ); … return something; }
  • 23.
    PEX  Add-in perVisual Studio (anche 2008?)  Genera un set mirato di unit-tests;  Può sfruttare Code Contracts;
  • 24.
    Multi-Core/Threading/Task...  L’hardware hapreso la sua strada;  Scrivere software che sfrutti più core è un’operazione complessa, troppo; Il focus del developer deve essere sul problema e non sull’infrastruttura che serve per risolvere il problema;
  • 25.
    I nuovi attori  Parallel LINQ (aka PLinq)  Task Parallel Library:  Task, Task<T>  Parallel.For, Parallel.ForEach  Parallel.Invoke  Coordination Data Structures:  System.Collections.Concurrent  Primitive per la sincronizzazione ○ Barrier, CountdownEvent, etc.  Unified Cancellation Model:  CancelationToken, CancelationTokenSource;
  • 26.
    AsParallel is theword <cit.> var q = from p in people.AsParallel() where p.Name == query.Name && p.State == query.State && p.Year >= yearStart && p.Year <= yearEnd orderby p.Year ascending select p;