Visual Studio 2010 and.NET Framework 4 Training Workshop
Presentation Outline (hidden slide): Technical Level: 300 Intended Audience: Developers & Architects Objectives (what do you want the audience to take away): Understand the changes coming to the.NET Framework 4 Understand the goals of CLR 4 Presentation Outline:.NET Framework History and Packaging New BCL Improvements Code Contracts Type Equivalence/No-PIA In-Process SxS
What’s New In.NET Framework 4 Name Title Organization
A Look Back….NET 1.0.NET 1.1.NET NET CTP! CLR 1.0 CLR 1.1 CLR 2.0 CLR 4 SP1
What Is The.NET Framework? Base Class Libraries The CLR JIT & NGEN Garbage Collector Security Model Exception Handling Loader & Binder WPF Win Forms DLR ASP.NET WCF And more! LINQ
Base Class Library Improvements Numerics BigInteger, Complex Data Structures Tuple SortedSet, ISet I/O Memory-Mapped File Unified Cancellation Model
The goal of CLR 4 Working Better Together… Faster… With Fewer Bugs… In-Proc SxS Native/Managed Interop DLR Integration Managed Extensibility Framework Threading Parallel Extensions Garbage Collection Profiling Code Contracts Debugging Corrupted State Exceptions
The goal of CLR 4 Working Better Together… Faster… With Fewer Bugs… In-Proc SxS DLR Integration Parallel Extensions Garbage Collection Profiling Code Contracts Debugging Corrupted State Exceptions Managed Extensibility Framework Threading Native/Managed Interop
Design By Contract Code Contracts introduce a way to specify contractual information that is not represented by a method or type’s signature alone.
What is a Contract? A contract is… an exchange of promises between two or more parties to do, or refrain from doing, an act which is enforceable in a court of law. - Wikipedia
Why Contracts? There upset about that? But its the best gift in the hole world. They’re upset about that? But it’s the best gift in the whole world.
Why Contracts? Just because something compiles, doesn’t mean it works…
A Contract contains… Pre-conditions - must be true before public Rational(int numerator, int denominator) { Contract.Requires(denominator > 0); … } Post-conditions -must be true after public string GetPassword() { Contract.Ensures(Contract.Result () != null); … return password; }
A Contract contains… Invariants - must always be true [ContractInvariantMethod] protected void ObjectInvariant() { Contract.Invariant(denominator > 0); }
Code Contracts
Type Equivalence Interop Assemblies translate between managed code and COM For each interface, struct, enum, delegate, and member, contains a managed equivalent with marshalling data
Primary Interop Assemblies cause many pain points… However!
Go Away, PIA! 1.Compilers embed the portions of the interop assemblies that the add-ins actually use 2.Runtime ensures the embedded definitions of these types are considered equivalent
No-PIA
Existing Side-By-Side (SxS).NET add-in Host Process (i.e. Outlook) 3.0 add-in 3.5 add-in 1.1 add-in.NET 1.1
In-Process Side-By-Side (SxS).NET 2.0.NET add-in Host Process (i.e. Outlook) 3.0 add-in 3.5 add-in 4.0 add-in
The goal of CLR 4.0 Working Better Together… Faster… With Fewer Bugs… In-Proc SxS Native/Managed Interop DLR Integration Managed Extensibility Framework Threading Parallel Extensions Garbage Collection Profiling Code Contracts Debugging Corrupted State Exceptions
Why Compatibility Is Hard.NET Framework 1.1 was highly compatible with 1.0 Thread [] threads = new Thread[8]; for (inti=0; i<8; i++) { Worker worker = new Worker(); threads[i] = new ThreadStart(worker.Work); threads[i].Start(); worker.identity =i; } Code from an Outlook addin our executives used
Why Compatibility Is Hard.NET 1.1 just slightly faster for starting threads No Executives at Microsoft could use their mail Bug wasn’t our fault – but no one cares Thread [] threads = new Thread[8]; for (inti=0; i<8; i++) { Worker worker = new Worker(); threads[i] = new ThreadStart(worker.Work); threads[i].Start(); worker.identity =i; } Code from an Outlook addin our executives used