SlideShare una empresa de Scribd logo
1 de 67
Visual Studio 2008 Nouveautés de l’IDE, C#3, VB9, … LINQ et perspectives
A propos … de votre speaker : Gregory Renard [akaRedo] ,[object Object]
 Bureau d’étude et d’aide à l’acquisition des technologies
 Microsoft RegionalDirector / MVP
 Auteur (2006 – 2007)
 Livres : .NET 2.0 – VB 2005 – VS2005
 Articles Techniques presse francophone
 Communautaire
 Blog : http://blogs.developpeur.org/redo
 Sites : Codes-Sources, ASP-PHP.NET, TechHeadBrothers, MSDN, …
 Speaker Microsoft .NET > 5 ans
 Events MSDN Belgique – Luxembourg
 Events MSDN France
TechDays France
Wygday
 E-mail : gregory@wygwam.com,[object Object]
 Nouveautés des langages
C# v3.0
VB v9.0
 LINQ
 Nouveautés de l’IDE VS2008,[object Object]
De 2002 à 2008 Source : http://www.danielmoth.com/Blog/2007/06/visual-studio-2008-stack.html
De 2002 à 2008
Nouveautés des langages Vue d’ensemble des évolutions du .NETFx et de son IDE ,[object Object]
C# v3.0
VB v9.0,[object Object]
C# 3.0, ses objectifs de conception ! Intégration d’objets, des données relationnelles et du XML LINQ Enrichissement du langage (C# v1.0, v2.0) Basésur la .NET CLR 2.0	 Ajout de nouvellesfonctionnalités Lambda expressions Détachement du langage des APIs spécifiques 100% compatible avec les versions précédentes C# 3.0 peutêtrecomplètementtraduit en C# 2.0
C# 3.0, ses Innovations ! Query expressions var contacts =     from c in customers     where c.State == "WA"     select new { c.Name, c.Phone }; Expression trees Local variable type inference Automatic properties Lambda expressions var contacts =     customers     .Where(c => c.State == "WA")     .Select(c => new { c.Name, c.Phone }); Partial methods Extension methods Object initializers Anonymous types
VB, son Historique !
VB 9.0, ses objectifs de conception ! Intégration d’objets, des données relationnelles et du XML LINQ + Intégration XML Amelioration du langage Amélioration de la syntaxe des tâches typiques Ajout de nouvellesfonctionnalités Lambda expressions
VB 9.0, ses Innovations ! Query expressions Dim contacts = From c In customers Where c.State= "WA" Select New With { Name = c.Name, _                                  Phone = c.Phone } Expression trees Implicitly typed local variable Deep XML support Lambda expressions Dim contacts = customers _     .Where(Function(c) c.State = "WA") _     .Select(Function(c) New With { Name = c.Name, _                                                      Phone = c.Phone }) Partial methods Extension methods Anonymous types Object initializers
Nouveautés des langages Vue d’ensemble des évolutions du .NETFx et de son IDE ,[object Object]
 Rappel C# v2.0 – VB v8.0
 C# v3.0
 VB v9.0,[object Object]
Types Generiques (C# - VB) Suppression du boxing/unboxing Suppression du Casting implicite Gestion de l’erreur lors de la compilation Meilleure lisibilité du code Meilleures performances
Classes partielles (C# - VB) Définition d’une classe  sur plusieurs fichiers Utilité dans la génération de code Exploité par les Winforms et Webforms
Méthodes anonymes (C#) Manière de passer un bloc de code comme paramètre de délégué. Réduction du codage dans l’instanciation de  délégués en éliminant la nécessité de créer une méthode séparée
Méthodes anonymes (C#) public delegate T Func<T, A> (A a) Délégué générique qui représente une fonction à un paramètre
Itérateurs (C#) Méthode, accesseur ou opérateur get permettant de prendre en charge l'itération foreach dans une classe ou une struct sans implémenter l'interface IEnumerable dans son intégralité Exécution différée Mot clé yield return
Qualificateur global de Namespace (C#) « :: » Résout le membre être caché par une autre entité du même nom.
Classes Statiques (C#) Accès sans création d’instances Chargé automatiquement par le CLR
Types Nullables (C#) Permet d’avoir des types valeurs nullables Pratique pour les données nullables provenant de bases de données
C# v3.0 http://msdn2.microsoft.com/en-us/library/bb383815(VS.90).aspx
Types implicites « Var » Déclaration de variable ou Array sans spécifier de type Déclaration fortement typée Doit être directement initialisée Variables locales uniquement
Initialisation d’objets Déclaration avec unesyntaxesimplifiée. Initialisationd’objettypé 	Person p = new Person {Name = "Chris Smith", Age = 31};  Initialisationd’objet avec type anonyme varproductInfos = from p in products 			select new {p.ProductName, p.UnitPrice}; foreach(var p in productInfos){...} Initialisation d’objet avec un type nullable : compile time error !
Initialisation de collections Uniquement pour les collection de classes implementant “Ienumerable” 	List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 		List<Test> list = new List<Test>  		{  			new Test{ num = 1, s = "Hello"},  			new Test{ num = 2, s = "World"},  			new Test{ num = 3, s = "From C#"}  		};
Propriétés automatiques Déclaration avec unesyntaxesimplifiée. Attributs non permis (utiliseralors la méthoderégulière)
Types anonymes Types automatiquement générés à la compilationvar v = new { Amount = 108, Message = "Hello" }; Non disponible dans le code source Intellisence disponible Typiquementutilisédans la clause select des query expression Repose surl’initialisationd’objet et collections 		var query = fromprod in Products		select new { prod.Color, prod.Price}; foreach(var v in query) 	{ Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); 	}
Méthodes d’extension  Ajout “Virtuel” d’une méthode à un type Méthode Static : premier paramètre “this” Étend, ne modifie pas le type, override  Définition du scope par “using namespaces”
Expressions Lambda Ecriture inline de méthodes Lambda opérateur « => » Simplifications d'écriture des entêtes d'une méthode anonyme delegateint D1(int i); 	D1 myDelegate1 = x => x + 1; int j = myDelegate1(5); //j = 6 Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction Possibilité de récupérer un arbre d’expression
Expressions Lambda Exemplesd’expressions lambda 	x => x + 1			// Implicitly typed, expression body 	x => { return x + 1; }		// Implicitly typed, statement body 	(int x) => x + 1		// Explicitly typed, expression body 	(int x) => { return x + 1; }	// Explicitly typed, statement body 	(x, y) => x * y			// Multiple parameters 	() => Console.WriteLine()	// No parameters
Expressions Lambda Inférence de type dans une Lambda customers.Where(c => c.City == "London"); Opérateurs de vérification Func<int, bool> myFunc = x => x == 5;  bool result = myFunc(4); // returns false of course int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; intoddNumbers = numbers.Count(n => n % 2 == 1); Ne pas confondre avec l’opérateur  “>=“ varfirstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);
Arbres d’expression usingSystem.Linq.Expressions;Expression<Func<int, bool>> exprTree = num => num < 5;  Les expressions lambda peuvent être traduite  Code IL Arbre d’expressions Peuvent être parsés au Runtime Utilisés au sein des LinqQuery Provider (Linq to SQL) Func<int,int> square = i => i * i;int four = square(2);Expression<Func<int,int>> squareEx = i => i * i; λ * i i i
Expressions Une expression représente l’arbre d’objets qui représente l’expression passée en argument
Méthodes Partielles Les types partiels peuvent maintenant contenir des méthodes partielles 		partial class Customer {	   partial void OnCreated() {Console.WriteLine(“Welcome new customer”);	   }	}
VB v9.0 http://msdn2.microsoft.com/en-us/library/y17w47af(VS.90).aspx
Types nullables Valid for all value types Dim a As Integer?‘Will be Nothing a = 123 a = Nothing‘Boolean HasValue property Dim hasValue = a.HasValue‘Get the value via Value property or directly Dim value1 As Integer = a.Value Dim value2 As Integer = a Will throw exception if equal to Nothing
Types implicites « Dim » Déclaration de variable ou Array sans spécifier de type Déclaration fortement typée Doit être directement initialisée Variables locales uniquement
Initialisation d’objets Déclaration avec unesyntaxesimplifiée Mot clé “With” Initialisationd’objettypé 	Dim namedCust = New Customer With {.Name = “xxx"} Initialisationd’objet avec type anonyme 	Dim anonymousCust = New With {.Name = “xxx"} Initialisation d’objet avec un type nullable : compile time error !
Types anonymes Types automatiquement générés à la compilation Dim product1 = New With {.Name = "paperclips", .Price = 1.29} Non disponible dans le code source Intellisence disponible Typiquementutilisédans la clause select des query expression Repose surl’initialisationd’objet
Types anonymes : Key Properties Comparaison de deux types anonymes (Key) Que les « Key »  sont comparées Les valeurs des « Key » sont : Read-Only Ne peuvent être changées Seule la valeur d'une propriété « Key » est incluse dans l'algorithme compilateur produisant le code du type anonyme.
RelaxedDelegates Vraie relaxation : les paramètres ne sont pas employés, vous pouvez ne pas les utiliser. 		Dim WithEventsbtn As New Button() SubBOnClick(ByValsender As Object, ByVal e As EventArgs) 	Handlesbtn.Click MessageBox.Show("Hello World from" & btn.Text)     		End Sub SubRelaxedOnClick() Handlesbtn.Click MessageBox.Show("Hello World from" & btn.Text)     		End Sub
Méthodes d’extension  Ajout “Virtuel” d’une méthode à un type Extension attribute <Extension()> de l’espace de nom System.Runtime.CompilerServices Étend, ne modifie pas le type, override  Définition du scope par “imports namespaces”
Expressions Lambda Ecriture inline de méthodes 		Dim fnums = numbers.Where(Function(n) n < 5) Lambda opérateur « Function » Simplifications d'écriture des entêtes d'une méthode anonyme Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction Possibilité de récupérer un arbre d’expression
Meilleur support XML Modèle hiérarchique de programmation simplifié Imports <xmlns:ns=“http://myNamespace/schema”>Dim books = <books>              <book Title=“Welcome to VB 9.0”>                 <author Name=“Bart”>                    <origin>Belgium</origin>                 </author>              </book>            </books>For Each book in books.<book>     Console.WriteLine(book.@Title);    Console.WriteLine(book.<author>.@Name);    Console.WriteLine(book...<origin>); Next Inline XML Child axis .< (for iteration) Attribute axis (.@) Descendant axis …search in all descendants
Meilleur support xml LINQ query DimcountriesWithCapital = _<Countries><%=From country In Countries, city In Capitals _ Wherecountry.Name = city.Country _Select _<CountryName=<%=country.Name%>Density=<%=country.Population / country.Area%>><Capital><Name><%=city.Name%></Name><Longitude><%=city.Longitude%></Longitude><Latitude><%=city.Latitude%></Latitude></Capital></Country> _%></Countries> ASP-alike embedded expressions

Más contenido relacionado

La actualidad más candente

Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Olivier Le Goaër
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Fabio Hernandez
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Fabio Hernandez
 
Partie 6: Qualité du Logiciel — Programmation orientée objet en C++
Partie 6: Qualité du Logiciel — Programmation orientée objet en C++Partie 6: Qualité du Logiciel — Programmation orientée objet en C++
Partie 6: Qualité du Logiciel — Programmation orientée objet en C++Fabio Hernandez
 
Partie 13: Héritage Multiple — Programmation orientée objet en C++
Partie 13: Héritage Multiple — Programmation orientée objet en C++Partie 13: Héritage Multiple — Programmation orientée objet en C++
Partie 13: Héritage Multiple — Programmation orientée objet en C++Fabio Hernandez
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Fabio Hernandez
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Laurent BUNIET
 
Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++Fabio Hernandez
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharpSDFG5
 

La actualidad más candente (20)

Java vs .Net
Java vs .NetJava vs .Net
Java vs .Net
 
Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++
 
Cours.langage c
Cours.langage cCours.langage c
Cours.langage c
 
Partie 6: Qualité du Logiciel — Programmation orientée objet en C++
Partie 6: Qualité du Logiciel — Programmation orientée objet en C++Partie 6: Qualité du Logiciel — Programmation orientée objet en C++
Partie 6: Qualité du Logiciel — Programmation orientée objet en C++
 
Cours de c
Cours de cCours de c
Cours de c
 
Partie 13: Héritage Multiple — Programmation orientée objet en C++
Partie 13: Héritage Multiple — Programmation orientée objet en C++Partie 13: Héritage Multiple — Programmation orientée objet en C++
Partie 13: Héritage Multiple — Programmation orientée objet en C++
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Builsing DSL using MDE
Builsing DSL using MDEBuilsing DSL using MDE
Builsing DSL using MDE
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
 
Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharp
 
Chapitre 1
Chapitre 1Chapitre 1
Chapitre 1
 

Destacado

Agile france 2013 - Dette Technique
Agile france 2013 - Dette TechniqueAgile france 2013 - Dette Technique
Agile france 2013 - Dette TechniqueFrançois Wauquier
 
Blogspot Un Nuevo Horizonte Para Mostrar, Compartir Y Comunicar
Blogspot Un Nuevo Horizonte Para Mostrar, Compartir Y ComunicarBlogspot Un Nuevo Horizonte Para Mostrar, Compartir Y Comunicar
Blogspot Un Nuevo Horizonte Para Mostrar, Compartir Y ComunicarTecnoInformatica
 
Violencia intrafamiliar
Violencia intrafamiliarViolencia intrafamiliar
Violencia intrafamiliarlaxery
 
InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...
InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...
InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...landaromero
 
Fairecompagnie
FairecompagnieFairecompagnie
FairecompagnieFing
 
memoguide_CHASSEZAC
memoguide_CHASSEZACmemoguide_CHASSEZAC
memoguide_CHASSEZACRémi MASSOT
 
Conectivismo Una teoría de aprendizaje para la era digital
Conectivismo Una teoría de aprendizaje para la era digitalConectivismo Una teoría de aprendizaje para la era digital
Conectivismo Una teoría de aprendizaje para la era digitalaugustodefranco .
 
Maison de la prostitution
Maison de la prostitution  Maison de la prostitution
Maison de la prostitution warum
 
Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...
Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...
Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...Asamblea Nacional
 
Notre nouveaux chez nous
Notre nouveaux chez nousNotre nouveaux chez nous
Notre nouveaux chez noussmargeridon
 
Historia de la alimentacion
Historia de la alimentacionHistoria de la alimentacion
Historia de la alimentacionPatricia Bernal
 

Destacado (20)

La lógica de la abundancia
La lógica de la abundanciaLa lógica de la abundancia
La lógica de la abundancia
 
Agile france 2013 - Dette Technique
Agile france 2013 - Dette TechniqueAgile france 2013 - Dette Technique
Agile france 2013 - Dette Technique
 
Gondomar 2
Gondomar 2Gondomar 2
Gondomar 2
 
Blogspot Un Nuevo Horizonte Para Mostrar, Compartir Y Comunicar
Blogspot Un Nuevo Horizonte Para Mostrar, Compartir Y ComunicarBlogspot Un Nuevo Horizonte Para Mostrar, Compartir Y Comunicar
Blogspot Un Nuevo Horizonte Para Mostrar, Compartir Y Comunicar
 
Sòlid rígid
Sòlid rígidSòlid rígid
Sòlid rígid
 
Violencia intrafamiliar
Violencia intrafamiliarViolencia intrafamiliar
Violencia intrafamiliar
 
tariq-cert
tariq-certtariq-cert
tariq-cert
 
InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...
InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...
InformacióN BioméDica Y Medicina Basada En Evidencia De Acceso Libre En Inter...
 
Jai Appris
Jai ApprisJai Appris
Jai Appris
 
Fairecompagnie
FairecompagnieFairecompagnie
Fairecompagnie
 
memoguide_CHASSEZAC
memoguide_CHASSEZACmemoguide_CHASSEZAC
memoguide_CHASSEZAC
 
SPIP-Geoportail
SPIP-GeoportailSPIP-Geoportail
SPIP-Geoportail
 
Conectivismo Una teoría de aprendizaje para la era digital
Conectivismo Una teoría de aprendizaje para la era digitalConectivismo Una teoría de aprendizaje para la era digital
Conectivismo Una teoría de aprendizaje para la era digital
 
Présentation prépa paces
Présentation prépa pacesPrésentation prépa paces
Présentation prépa paces
 
Maison de la prostitution
Maison de la prostitution  Maison de la prostitution
Maison de la prostitution
 
Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...
Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...
Objeción parcial al proyecto de ley orgánica de recursos hídricos, usos y apr...
 
Papel servicios 2.0 en formacion
Papel servicios 2.0 en formacionPapel servicios 2.0 en formacion
Papel servicios 2.0 en formacion
 
Notre nouveaux chez nous
Notre nouveaux chez nousNotre nouveaux chez nous
Notre nouveaux chez nous
 
Historia de la alimentacion
Historia de la alimentacionHistoria de la alimentacion
Historia de la alimentacion
 
Coito Catalan
Coito CatalanCoito Catalan
Coito Catalan
 

Similar a Visual Studio 2008 Overview

Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Gregory Renard
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Gregory Renard
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Gregory Renard
 
Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetkemenaran
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)ISIG
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv PsGregory Renard
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistVincent Agnus
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipseISIG
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Formation java script
Formation java scriptFormation java script
Formation java scriptRomdhani Asma
 

Similar a Visual Studio 2008 Overview (20)

Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
Theme 6
Theme 6Theme 6
Theme 6
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv Ps
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Formation java script
Formation java scriptFormation java script
Formation java script
 
Roslyn
RoslynRoslyn
Roslyn
 

Más de Gregory Renard

WygDay - Session Innovation xBrainLab
WygDay - Session Innovation xBrainLabWygDay - Session Innovation xBrainLab
WygDay - Session Innovation xBrainLabGregory Renard
 
Approach the future of tourism by the new Technologies
Approach the future of tourism by the new TechnologiesApproach the future of tourism by the new Technologies
Approach the future of tourism by the new TechnologiesGregory Renard
 
Approach the future of cities by the singularity of technologies !
Approach the future of cities by the singularity of technologies !Approach the future of cities by the singularity of technologies !
Approach the future of cities by the singularity of technologies !Gregory Renard
 
Wygday 2009 Session Innovation
Wygday 2009   Session InnovationWygday 2009   Session Innovation
Wygday 2009 Session InnovationGregory Renard
 
Net 2007 Faire Du E Commerce Dans Les Mv
Net 2007   Faire Du E Commerce Dans Les MvNet 2007   Faire Du E Commerce Dans Les Mv
Net 2007 Faire Du E Commerce Dans Les MvGregory Renard
 
Wygday Session PléNièRe (2)
Wygday Session PléNièRe (2)Wygday Session PléNièRe (2)
Wygday Session PléNièRe (2)Gregory Renard
 
Wygday Session PléNièRe (1)
Wygday Session PléNièRe (1)Wygday Session PléNièRe (1)
Wygday Session PléNièRe (1)Gregory Renard
 
Vs2008 Breakthrough Software Dev
Vs2008 Breakthrough Software DevVs2008 Breakthrough Software Dev
Vs2008 Breakthrough Software DevGregory Renard
 
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008Gregory Renard
 
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008Gregory Renard
 
Techdays Visual Studio 2010
Techdays Visual Studio 2010Techdays Visual Studio 2010
Techdays Visual Studio 2010Gregory Renard
 
Ta Visual Studio2008 Vb9 C#3
Ta Visual Studio2008   Vb9   C#3Ta Visual Studio2008   Vb9   C#3
Ta Visual Studio2008 Vb9 C#3Gregory Renard
 
Principes De Base De Asp .Net
Principes De Base De Asp .NetPrincipes De Base De Asp .Net
Principes De Base De Asp .NetGregory Renard
 

Más de Gregory Renard (20)

WygDay - Session Innovation xBrainLab
WygDay - Session Innovation xBrainLabWygDay - Session Innovation xBrainLab
WygDay - Session Innovation xBrainLab
 
WygDay 2010
WygDay 2010WygDay 2010
WygDay 2010
 
M Forum
M ForumM Forum
M Forum
 
Approach the future of tourism by the new Technologies
Approach the future of tourism by the new TechnologiesApproach the future of tourism by the new Technologies
Approach the future of tourism by the new Technologies
 
Approach the future of cities by the singularity of technologies !
Approach the future of cities by the singularity of technologies !Approach the future of cities by the singularity of technologies !
Approach the future of cities by the singularity of technologies !
 
Wygday 2009 Session Innovation
Wygday 2009   Session InnovationWygday 2009   Session Innovation
Wygday 2009 Session Innovation
 
Net 2007 Faire Du E Commerce Dans Les Mv
Net 2007   Faire Du E Commerce Dans Les MvNet 2007   Faire Du E Commerce Dans Les Mv
Net 2007 Faire Du E Commerce Dans Les Mv
 
Wygday Session PléNièRe (2)
Wygday Session PléNièRe (2)Wygday Session PléNièRe (2)
Wygday Session PléNièRe (2)
 
Wygday Session PléNièRe (1)
Wygday Session PléNièRe (1)Wygday Session PléNièRe (1)
Wygday Session PléNièRe (1)
 
Wygday 2008
Wygday 2008Wygday 2008
Wygday 2008
 
Web Services
Web ServicesWeb Services
Web Services
 
Vs2008 Breakthrough Software Dev
Vs2008 Breakthrough Software DevVs2008 Breakthrough Software Dev
Vs2008 Breakthrough Software Dev
 
Vs2008 Ms Lux
Vs2008 Ms LuxVs2008 Ms Lux
Vs2008 Ms Lux
 
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
 
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008Visual Basic 9.0   Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
 
Tour Horizont.Net
Tour Horizont.NetTour Horizont.Net
Tour Horizont.Net
 
Techdays Visual Studio 2010
Techdays Visual Studio 2010Techdays Visual Studio 2010
Techdays Visual Studio 2010
 
Ta Visual Studio2008 Vb9 C#3
Ta Visual Studio2008   Vb9   C#3Ta Visual Studio2008   Vb9   C#3
Ta Visual Studio2008 Vb9 C#3
 
Starter Kits
Starter KitsStarter Kits
Starter Kits
 
Principes De Base De Asp .Net
Principes De Base De Asp .NetPrincipes De Base De Asp .Net
Principes De Base De Asp .Net
 

Visual Studio 2008 Overview

  • 1. Visual Studio 2008 Nouveautés de l’IDE, C#3, VB9, … LINQ et perspectives
  • 2.
  • 3. Bureau d’étude et d’aide à l’acquisition des technologies
  • 5. Auteur (2006 – 2007)
  • 6. Livres : .NET 2.0 – VB 2005 – VS2005
  • 7. Articles Techniques presse francophone
  • 9. Blog : http://blogs.developpeur.org/redo
  • 10. Sites : Codes-Sources, ASP-PHP.NET, TechHeadBrothers, MSDN, …
  • 11. Speaker Microsoft .NET > 5 ans
  • 12. Events MSDN Belgique – Luxembourg
  • 13. Events MSDN France
  • 16.
  • 21.
  • 22. De 2002 à 2008 Source : http://www.danielmoth.com/Blog/2007/06/visual-studio-2008-stack.html
  • 23. De 2002 à 2008
  • 24.
  • 26.
  • 27. C# 3.0, ses objectifs de conception ! Intégration d’objets, des données relationnelles et du XML LINQ Enrichissement du langage (C# v1.0, v2.0) Basésur la .NET CLR 2.0 Ajout de nouvellesfonctionnalités Lambda expressions Détachement du langage des APIs spécifiques 100% compatible avec les versions précédentes C# 3.0 peutêtrecomplètementtraduit en C# 2.0
  • 28. C# 3.0, ses Innovations ! Query expressions var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone }; Expression trees Local variable type inference Automatic properties Lambda expressions var contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone }); Partial methods Extension methods Object initializers Anonymous types
  • 30. VB 9.0, ses objectifs de conception ! Intégration d’objets, des données relationnelles et du XML LINQ + Intégration XML Amelioration du langage Amélioration de la syntaxe des tâches typiques Ajout de nouvellesfonctionnalités Lambda expressions
  • 31. VB 9.0, ses Innovations ! Query expressions Dim contacts = From c In customers Where c.State= "WA" Select New With { Name = c.Name, _ Phone = c.Phone } Expression trees Implicitly typed local variable Deep XML support Lambda expressions Dim contacts = customers _ .Where(Function(c) c.State = "WA") _ .Select(Function(c) New With { Name = c.Name, _ Phone = c.Phone }) Partial methods Extension methods Anonymous types Object initializers
  • 32.
  • 33. Rappel C# v2.0 – VB v8.0
  • 35.
  • 36. Types Generiques (C# - VB) Suppression du boxing/unboxing Suppression du Casting implicite Gestion de l’erreur lors de la compilation Meilleure lisibilité du code Meilleures performances
  • 37. Classes partielles (C# - VB) Définition d’une classe sur plusieurs fichiers Utilité dans la génération de code Exploité par les Winforms et Webforms
  • 38. Méthodes anonymes (C#) Manière de passer un bloc de code comme paramètre de délégué. Réduction du codage dans l’instanciation de délégués en éliminant la nécessité de créer une méthode séparée
  • 39. Méthodes anonymes (C#) public delegate T Func<T, A> (A a) Délégué générique qui représente une fonction à un paramètre
  • 40. Itérateurs (C#) Méthode, accesseur ou opérateur get permettant de prendre en charge l'itération foreach dans une classe ou une struct sans implémenter l'interface IEnumerable dans son intégralité Exécution différée Mot clé yield return
  • 41. Qualificateur global de Namespace (C#) « :: » Résout le membre être caché par une autre entité du même nom.
  • 42. Classes Statiques (C#) Accès sans création d’instances Chargé automatiquement par le CLR
  • 43. Types Nullables (C#) Permet d’avoir des types valeurs nullables Pratique pour les données nullables provenant de bases de données
  • 45. Types implicites « Var » Déclaration de variable ou Array sans spécifier de type Déclaration fortement typée Doit être directement initialisée Variables locales uniquement
  • 46. Initialisation d’objets Déclaration avec unesyntaxesimplifiée. Initialisationd’objettypé Person p = new Person {Name = "Chris Smith", Age = 31}; Initialisationd’objet avec type anonyme varproductInfos = from p in products select new {p.ProductName, p.UnitPrice}; foreach(var p in productInfos){...} Initialisation d’objet avec un type nullable : compile time error !
  • 47. Initialisation de collections Uniquement pour les collection de classes implementant “Ienumerable” List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; List<Test> list = new List<Test> { new Test{ num = 1, s = "Hello"}, new Test{ num = 2, s = "World"}, new Test{ num = 3, s = "From C#"} };
  • 48. Propriétés automatiques Déclaration avec unesyntaxesimplifiée. Attributs non permis (utiliseralors la méthoderégulière)
  • 49. Types anonymes Types automatiquement générés à la compilationvar v = new { Amount = 108, Message = "Hello" }; Non disponible dans le code source Intellisence disponible Typiquementutilisédans la clause select des query expression Repose surl’initialisationd’objet et collections var query = fromprod in Products select new { prod.Color, prod.Price}; foreach(var v in query) { Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); }
  • 50. Méthodes d’extension Ajout “Virtuel” d’une méthode à un type Méthode Static : premier paramètre “this” Étend, ne modifie pas le type, override Définition du scope par “using namespaces”
  • 51. Expressions Lambda Ecriture inline de méthodes Lambda opérateur « => » Simplifications d'écriture des entêtes d'une méthode anonyme delegateint D1(int i); D1 myDelegate1 = x => x + 1; int j = myDelegate1(5); //j = 6 Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction Possibilité de récupérer un arbre d’expression
  • 52. Expressions Lambda Exemplesd’expressions lambda x => x + 1 // Implicitly typed, expression body x => { return x + 1; } // Implicitly typed, statement body (int x) => x + 1 // Explicitly typed, expression body (int x) => { return x + 1; } // Explicitly typed, statement body (x, y) => x * y // Multiple parameters () => Console.WriteLine() // No parameters
  • 53. Expressions Lambda Inférence de type dans une Lambda customers.Where(c => c.City == "London"); Opérateurs de vérification Func<int, bool> myFunc = x => x == 5; bool result = myFunc(4); // returns false of course int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; intoddNumbers = numbers.Count(n => n % 2 == 1); Ne pas confondre avec l’opérateur “>=“ varfirstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);
  • 54. Arbres d’expression usingSystem.Linq.Expressions;Expression<Func<int, bool>> exprTree = num => num < 5; Les expressions lambda peuvent être traduite Code IL Arbre d’expressions Peuvent être parsés au Runtime Utilisés au sein des LinqQuery Provider (Linq to SQL) Func<int,int> square = i => i * i;int four = square(2);Expression<Func<int,int>> squareEx = i => i * i; λ * i i i
  • 55. Expressions Une expression représente l’arbre d’objets qui représente l’expression passée en argument
  • 56. Méthodes Partielles Les types partiels peuvent maintenant contenir des méthodes partielles partial class Customer { partial void OnCreated() {Console.WriteLine(“Welcome new customer”); } }
  • 58. Types nullables Valid for all value types Dim a As Integer?‘Will be Nothing a = 123 a = Nothing‘Boolean HasValue property Dim hasValue = a.HasValue‘Get the value via Value property or directly Dim value1 As Integer = a.Value Dim value2 As Integer = a Will throw exception if equal to Nothing
  • 59. Types implicites « Dim » Déclaration de variable ou Array sans spécifier de type Déclaration fortement typée Doit être directement initialisée Variables locales uniquement
  • 60. Initialisation d’objets Déclaration avec unesyntaxesimplifiée Mot clé “With” Initialisationd’objettypé Dim namedCust = New Customer With {.Name = “xxx"} Initialisationd’objet avec type anonyme Dim anonymousCust = New With {.Name = “xxx"} Initialisation d’objet avec un type nullable : compile time error !
  • 61. Types anonymes Types automatiquement générés à la compilation Dim product1 = New With {.Name = "paperclips", .Price = 1.29} Non disponible dans le code source Intellisence disponible Typiquementutilisédans la clause select des query expression Repose surl’initialisationd’objet
  • 62. Types anonymes : Key Properties Comparaison de deux types anonymes (Key) Que les « Key » sont comparées Les valeurs des « Key » sont : Read-Only Ne peuvent être changées Seule la valeur d'une propriété « Key » est incluse dans l'algorithme compilateur produisant le code du type anonyme.
  • 63. RelaxedDelegates Vraie relaxation : les paramètres ne sont pas employés, vous pouvez ne pas les utiliser. Dim WithEventsbtn As New Button() SubBOnClick(ByValsender As Object, ByVal e As EventArgs) Handlesbtn.Click MessageBox.Show("Hello World from" & btn.Text) End Sub SubRelaxedOnClick() Handlesbtn.Click MessageBox.Show("Hello World from" & btn.Text) End Sub
  • 64. Méthodes d’extension Ajout “Virtuel” d’une méthode à un type Extension attribute <Extension()> de l’espace de nom System.Runtime.CompilerServices Étend, ne modifie pas le type, override Définition du scope par “imports namespaces”
  • 65. Expressions Lambda Ecriture inline de méthodes Dim fnums = numbers.Where(Function(n) n < 5) Lambda opérateur « Function » Simplifications d'écriture des entêtes d'une méthode anonyme Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction Possibilité de récupérer un arbre d’expression
  • 66. Meilleur support XML Modèle hiérarchique de programmation simplifié Imports <xmlns:ns=“http://myNamespace/schema”>Dim books = <books> <book Title=“Welcome to VB 9.0”> <author Name=“Bart”> <origin>Belgium</origin> </author> </book> </books>For Each book in books.<book> Console.WriteLine(book.@Title); Console.WriteLine(book.<author>.@Name); Console.WriteLine(book...<origin>); Next Inline XML Child axis .< (for iteration) Attribute axis (.@) Descendant axis …search in all descendants
  • 67. Meilleur support xml LINQ query DimcountriesWithCapital = _<Countries><%=From country In Countries, city In Capitals _ Wherecountry.Name = city.Country _Select _<CountryName=<%=country.Name%>Density=<%=country.Population / country.Area%>><Capital><Name><%=city.Name%></Name><Longitude><%=city.Longitude%></Longitude><Latitude><%=city.Latitude%></Latitude></Capital></Country> _%></Countries> ASP-alike embedded expressions
  • 68. Autres amélioration VB v 9.0 Friend assemblies InternalsVisibleTo attribute recognized Runtime agility Compile without Microsoft.VisualBasic.dll Need originates from CF and Silverlight New /vbruntime switch Improved generic type inferencing Calling Object members on interfaces
  • 69. LINQ .NET Language-IntegratedQuery http://msdn2.microsoft.com/fr-fr/netframework/aa904594.aspx
  • 70. LINQ : Définition Linq = LanguageINtegratedQuery Exemples DLinq = Database + Linq Appelé maintenant Linq to Data Xlinq = XML + Linq Appelé maintenant Linq to XML
  • 71. LINQ : Concepts Linq = innovation de VS2008 et .NET 3.5 Change radicalement le travail de données Avantages Simplifie l’écriture des requêtes Unifie la syntaxe de requêtes pour tout type de source de données Renforce la connection entre les données relationnelles et le monde de l’OO Accélère les développements Gestion des erreurs à la compilation Intellisense et debugging
  • 72. LINQ : Fondations C# v3.0 – VB v9.0 Query expressions var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone }; Expression trees Local variable type inference Automatic properties Lambda expressions var contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone }); Partial methods Extension methods Object initializers Anonymous types
  • 73. LINQ : Architecture Others… VB C# .NET Language Integrated Query (LINQ) Sources de données LINQ Linqsur des sources ADO.NET LINQ To XML LINQ To Entities LINQ To SQL LINQ To Datasets LINQ To Objects Provider <book> <title/> <author/> <price/> </book> XML Relationnel Objets
  • 74. Une syntaxe unique pour plusieurs sources de données
  • 75. LINQ : 3 parties de toute requête Touterequête LINQ consiste en actions essentielles : Obtention de la source de données(xml, db, Objects) Création de la requête Exécution de la requête
  • 76. LINQ : Framework L’architecture à la base de Linq est constituée de deux parties LINQ Language Extensions Un langage de programmation implémentant les extensions de langage LINQ C# et VB implémentés au sein de VS2008 LINQ Providers Provider LINQ implémentant les Standard QueryOperator méthodes pour chaque source de données spéficique.
  • 77. LINQ : Requête de base IEnumerable<Customer> customerQuery = from cust in customers //... Exemple : List<int> numberList = new List<int> { 1, 2, 3, 4 };var query = from i in numberList where i < 4 select i;
  • 78. Query Expressions    var locals = from c in customers Wherec.ZipCode==91822 select (new {FullName=c.FirstName + “ “ + c.LastName, HomeAdresse=c.Address});  var locals = customers .Where(c => c.ZipCode == 91822) .Select(c => new { FullName = c.FirstName + “ “ + c.LastName, HomeAddress = c.Address });
  • 79. Linq or not : Différence ? C#2 List<City> returnCities = new List<City>(); Foreach (city c in cities) { If (c.Name==« London ») returnCities.Add(c); } C#3 var query= from c in cities Where c. Name==« London » Select c;
  • 80. Exprimer la sémantique d’une requête et non son implémentation
  • 81. LINQ : Projections - SELECT Utilisation du Keyword “Select” Nécessité de modifier, transformer les donnéesretournées par unerequête LINQ LINQ permet des scénariosavancés de mise en forme de données = “Projections” Exploitation des type anonymesproposés par le compilateur
  • 82. LINQ : Projections + Types Anonymes List<City> cities = CityUtilityHelper.GetCities(); var places = from city in cities where city.DistanceFromSeattle > 1000 select new { City = city.Name, Country = city.Country, DistanceInKm = city.DistanceFromSeattle * 1.61 }; GridView1.DataSource = places; GridView1.DataBind(); Type anonymeutilisé pour forger un type de retour personnalisé ! Application d’une conversion Miles/Kms
  • 83. LINQ : Query Operators C# 3.0 VB 9.0 from .. in .. where .. select .. [into ..] group .. by .. [into ..] orderby .. [descending] join .. in .. on .. equals .. let .. = .. From .. [As ..] In .. Where .. Select .. [,..]* Group .. By .. Into .. Group Join .. [As ..] In .. On ..Equals .. [...] Into .. Order By ... [Descending] Join .. In .. On ..Equals .. [...] Let .. = ... Others: Skip, Skip While, Take, Take While Aggregates: All, Any, Average, [Long]Count, Max, Min, Sum Les opérateurs sont implémentés via des méthodes d’extensions
  • 84.
  • 87.
  • 88. Amélioration du Debugger Remote debugging support pour Windows Vista Amélioration support du debugging des applications multithread Debugging support pour LINQ Debugging support for WCF Meilleur support des script de debugging
  • 89.
  • 92. VS2008… Vos Questions ?

Notas del editor

  1. • VB9• C#3• IDE enhancements for .NET Fx 3.0• .NET Fx 3.5• Impact of Windows Server 2008 for developers
  2. The main points are that the CLR engine is the same version (so no need to retest your apps) and that the headline feature is the language enhancements (C#3 & VB9 compilers) and LINQ.
  3. The main points are that the CLR engine is the same version (so no need to retest your apps) and that the headline feature is the language enhancements (C#3 & VB9 compilers) and LINQ.
  4. C# - started as “the (first) language for CLR”; emphasize the pragmatic approach (cf. Anders Hejlsberg) = be explicit about language features like properties, events, etc.  developer confidence2.0 = generics wave (impact on CLR) + additional useful things (that do require generics on their own + that are useful on their own)3.0 = LINQ + making the language more concise, more productive, more powerful, ...
  5. LINQ: tell the story of Reflex 2.0, Dbase III+, ... where data and code were close together  structured + distributed programming changed this = layered approach  result: data and code on two islands with a huge gap between the two  need for O/R mapping tools etcWith LINQ: data becomes a first-class citizen of the languageReduce “language noise” (e.g. tiresome repetitive code etc)API independent  you can reimplement stuff on your own, the language doesn’t care about it (e.g. extension methods on Ienumerable<T>, don’t mention the word yet)Backward compat: refer to MSR paper on formal proof of the possibility for translation of every C# 3.0 program to an equivalent C# 2.0 program (semantically)
  6. Build up the slide and introduce “syntactical sugar”. Story telling approach referring back to the gap between data and code and the LINQ solution using Language Integrated queries  requires glue: functional style programming concepts, introduction of concepts from the relational world (e.g. projection clauses require anonymous types) and language simplification (e.g. object initializers).Use the words:-Different compilation stages (front-end query syntax is translated into “pure” C# into ..., e.g. resolution of query expressions to chains of method calls)-Method call chain (can still be instance methods or extension methods)
  7. VB = longer history (up to 9.0)Refer to huge transition from 6.0 to .NET which implied the creation of a runtime library for bw compat: play the rules of the CLS (OO for example) and remain consistent with VB pre-.NETVB 8.0 = GenericsVB 9.0 = LINQ + XML (difference with C#)
  8. Similar story as in C# 3.0 except for XML integration; emphasize that language evolutuon doesn’t mean that languages have to go hand in hand on any field.
  9. Similar story as with C# 3.0 but abbrev’d.
  10. http://msdn2.microsoft.com/fr-fr/library/7cz8t42e(VS.80).aspx
  11. Réf : http://www.dotnetguru.org/articles/dossiers/generics/CS2_Generics_FR2.htm
  12. Réf : http://www.dotnetguru.org/articles/dossiers/anonymescsharp2/CS2_AnonymousMethod_FR.htmThe delegate keyword is used to declare a reference type that can be used to encapsulate a named or an anonymous method. Delegates are similar to function pointers in C++; however, delegates are type-safe and secure. For applications of delegates, see Delegates and Generic Delegates.
  13. http://msdn2.microsoft.com/en-us/library/sx2bwtw7(VS.80).aspx
  14. Traitement continuPossibilité de gérer des listes infinies comme dans les langages fonctionnels
  15. http://msdn2.microsoft.com/fr-fr/library/79b3xss3(VS.80).aspx
  16. http://msdn2.microsoft.com/en-us/library/bb383815(VS.90).aspx
  17. When used with local variables, the var keyword instructs the compiler to infer the type of the variable or the array elements from the expression on the right side of the initialization statement.Indispensable pour les types anonymeshttp://msdn2.microsoft.com/fr-fr/library/bb384061(VS.90).aspx
  18. http://msdn2.microsoft.com/fr-fr/library/bb384062(VS.90).aspx
  19. Collection initializers provide a way to specify one or more object intializers when initializing any collection class that implements IEnumerable. By using a collection initializer you do not have to specify multiple calls to the Add method of the class in your source code; the compiler adds the calls2ème exemple :The following collection initializer uses object initializers to initialize objects of the Test class defined in an earlier example. Note that the individual object initializers are enclosed in braces and separated by commas.