c# et .net

916

Click here to load reader

Upload: bilel183

Post on 19-Dec-2014

6.345 views

Category:

Documents


31 download

DESCRIPTION

 

TRANSCRIPT

  • 1. G. LeblancC# et .NETC# et .NETVersions 1 4 G. Leblanc Spcialiste de C# et de .NET, Grard Leblanc est lauteur de plusieursVersions 1 4 C#et.NETLouvrage de rfrence sur la plate-forme .NET best-sellers sur laLangage phare de Microsoft, C# permet de concevoir avec une facilit dconcertante des applications Windows et programmation Windows.Web, mme pour des programmeurs non chevronns, en combinant les meilleurs aspects des langages C++, VisualDistingu MVP (MostBasic et Java. Il a t spcialement conu pour la plate-forme de dveloppement .NET, aujourdhui omniprsente Valuable Professional)dans le monde Microsoft mais connaissant galement un essor remarquable sous Linux.par Microsoft pour sa contribution laAprs une premire partie consacre la syntaxe de C#, de la version 1 (Visual Studio 2002) la version 4 (Visualconnaissance des logicielsStudio 2010), louvrage tudie en dtail ses diffrents domaines dapplication : les applications Windows avec Win-de dveloppementForms, les applications Web avec ASP.NET et Ajax, laccs aux donnes avec ADO.NET, Linq et XML, ainsi que les dapplications, il estservices Web de types SOAP et REST. En complment de cet apprentissage, le code source de tous les exemplesparticulirement attentifmentionns dans le livre est disponible sur www.editions-eyrolles.com. aux besoins des entreprises avec lesquelles il entretient des contacts suivis.Au sommaireIntroduction larchitecture .NET Le langage C# Types et instructions de base Les classes de base Les classesnon visuelles Les classes conteneurs Le traitement derreurs Dlgus, vnements et expressions lambda Cration et dploiement de programmes Informations sur la conguration Threads et excutions parallles sur Versions 1 4multicoeurs La programmation Windows volution de la programmation Windows Les fentres Clavier, souriset messages Les tracs avec GDI+ Composants et hirarchie de classes Boutons et cases Les botes deliste Zones dafchage et ddition Barres de menu, dtat et de boutons Composants de dlement Botes dedialogue et fentres spciales Les impressions Programmation rseau Accs aux donnes Accs aux chiers Accs aux bases de donnes avec ADO.NET Liaisons de donnes XML Accs aux donnes avec Linq Laprogrammation Web La programmation ASP.NET Les services Web. qui sadresse ce livre ? Aux dveloppeurs qui souhaitent dcouvrir C# et la plate-forme .NET Aux programmeurs et dcideurs Internet dsireux de connatre ASP.NETGrard Leblanc@ Sur le site www.editions-eyrolles.com Tlchargez le code source des exemples du livre Consultez les mises jour et complments Dialoguez avec lauteurISBN : 978-2-212-12604-4 Conception : Nord Compo9 7 8 2 2 1 2 1 2 6 04 4Code diteur : G12604 PurestockX 47

2. C# et .net Versions 1 4 3. CHEZ LE MME DITEURG. Leblanc. Silverlight 2.N12375, 2008, 330 pages.T. Lebrun. WPF par la pratique.N12422, 2008, 318 pages.L. Labat. Dveloppement XNA pour la Xbox et le PC.N12458, 2009, 344 pages.L. Bloch et C. Wolfhugel. Scurit informatique.N12525, 2009, 292 pages.E. Slom. Mmento Sites web. Les bonnes pratiques.N12456, 2009, 14 pages.J.-M. Defrance. Premires applications Web 2.0 avec Ajax et PHP.N12090, 2008, 450 pages.T. Audoux et J.-M. Defrance. Dreamweaver CS4.N12462, 2009, 610 pages.R. Goetter. CSS2. Pratique du design web.N12461, 2009, 318 pages.T. Templier, A. Gougeon. JavaScript pour le Web 2.0.N12009, 2007, 492 pages.C. Porteneuve. Bien dvelopper pour le Web 2.0. Bonnes pratiques Ajax.N12391, 2008, 674 pages.M. Plasse. Dveloppez en Ajax.N11965, 2006, 314 pages.M. Nebra. Russir son site web avec XHTML et CSS.N11948, 2007, 306 pages.F. Draillard. Premiers pas en CSS et HTML. Guide pour les dbutants.N12011, 2006, 232 pages.R. Goetter. Mmento CSS.N12542, 2009, 14 pages.R. Goetter. Mmento XHTML.N12541, 2009, 14 pages. 4. C# et .net Versions 1 4Grard Leblanc 5. DITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 www.editions-eyrolles.com Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise notamment dans les tablissements denseignement, provoquant une baisse brutale des achats de livres, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace. En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement leprsent ouvrage, sur quelque support que ce soit, sans autorisation de lditeur ou du Centre Franais dExploitation duDroit de Copie, 20, rue des Grands-Augustins, 75006 Paris. Groupe Eyrolles, 2009, ISBN : 978-2-212-12604-4 6. LivreC-Net.book Page V Jeudi, 3. septembre 2009 10:58 10Table des matires Introduction larchitecture .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Le concepteur et responsable du projet . . . . . . . . . . . . . . . . . . . . . . . . . 1 Ce que .NET change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Larchitecture .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Les langages de larchitecture .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Le langage C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Crer des applications Windows et Web . . . . . . . . . . . . . . . . . . . . . . . . 10 Pour rsumer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 C# version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 C# version 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 C# version 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Les sujets abords dans cet ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 CHAPITRE 1 C# : types et instructions de base . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.1Premiers pas en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.1.1 Premier programme en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.1.2 Second programme en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.2Commentaires en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.3Identicateurs en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.3.1 Les identicateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.3.2 Les mots rservs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1.4Types de donnes en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.4.1 Les types entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 7. LivreC-Net.book Page VI Jeudi, 3. septembre 2009 10:58 10 C# et .NET versions 1 4VI1.4.2 Les types non signs ne sont pas conformes au CLS . . . . . . . . .261.4.3 Le type boolen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261.4.4 Les types rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271.4.5 Les rels peuvent tre entachs dune inme erreur . . . . . . . . . . 281.4.6 Le type char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281.4.7 Les chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291.4.8 Le qualicatif const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.5 Constantes en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 1.5.1 Constantes et directive #dene . . . . . . . . . . . . . . . . . . . . . . . . . .31 1.5.2 Constantes entires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.5.3 Sufxe pour format long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1.5.4 Des erreurs de calcul qui sexpliquent . . . . . . . . . . . . . . . . . .32 1.5.5 Constantes relles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33 1.5.6 Le sufxe f pour les oat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 1.5.7 Le sufxe m pour le type decimal . . . . . . . . . . . . . . . . . . . . . . . .34 1.5.8 Constantes de type caractre . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 1.5.9 Constantes de type chanes de caractres . . . . . . . . . . . . . . .34 1.6Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.7 Le type enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 1.7.1Indicateurs binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 1.8 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 1.8.1 Les tableaux une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . .44 1.8.2 Dclaration et initialisation de tableau . . . . . . . . . . . . . . . . . . . .45 1.8.3 Accs aux cellules du tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 1.8.4 Libration de tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 1.8.5 Tableaux avec cellules de types diffrents . . . . . . . . . . . . . . . . . .47 1.8.6 Copie de tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 1.8.7 Tableaux plusieurs dimensions . . . . . . . . . . . . . . . . . . . . . . . . . 49 1.8.8 Les tableaux dchiquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50 1.9Niveaux de priorit des oprateurs . . . . . . . . . . . . . . . . . . . . . . . 51 1.10 Les instructions du C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 1.10.1 Bloc dinstructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 1.10.2 Toute variable doit tre initialise avant utilisation en lecture . . .52 1.10.3 Pas dinstructions spares par une virgule en C# . . . . . . . . . . . .52 1.10.4 Conversions automatiques et castings . . . . . . . . . . . . . . . . . . . . . 53 1.11 Oprations dentre/sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 1.11.1Afchages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 1.11.2 De la couleur, mme pour la console . . . . . . . . . . . . . . . . . . . . . . 55 8. LivreC-Net.book Page VII Jeudi, 3. septembre 2009 10:58 10 Table des matires VII1.11.3Et des sons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561.11.4Lecture de donnes saisies au clavier . . . . . . . . . . . . . . . . . . . . . 56 1.12 Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58 1.12.1 Les oprateurs arithmtiques . . . . . . . . . . . . . . . . . . . . . . . . . . .58 1.12.2 Pr- et post-incrmentations et dcrmentations . . . . . . . . . . . . . 58 1.12.3 Type des rsultats intermdiaires . . . . . . . . . . . . . . . . . . . . . . . . . 59 1.12.4 Oprateurs +=, -=, etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 1.12.5 Dpassements de capacit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 1.12.6 Oprations sur les boolens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 1.12.7 Oprations au niveau binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 1.12.8 Dcalages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 1.13 Conditions en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 1.13.1 Linstruction if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 1.13.2 Variable boolenne dans condition . . . . . . . . . . . . . . . . . . . . . . . 66 1.13.3 Condition illgale en C, C++ et C# . . . . . . . . . . . . . . . . . . . . . . .66 1.13.4 Incrmentation dans condition . . . . . . . . . . . . . . . . . . . . . . . . . . 66 1.13.5 if imbriqus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 1.13.6 Linstruction ? : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 1.13.7 Les oprateurs logiques && et || . . . . . . . . . . . . . . . . . . . . . . . . .67 1.13.8 Une rgle de logique parfois utile . . . . . . . . . . . . . . . . . . . . . . . .68 1.14 Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 1.14.1 Formes while et do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 1.14.2 Forme for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 1.14.3 Les variables dclares dans des boucles . . . . . . . . . . . . . . . . . .70 1.14.4 foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 1.14.5 Les instructions break et continue . . . . . . . . . . . . . . . . . . . . . . . .71 1.14.6 Linstruction switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 1.14.7 Linstruction goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74 1.15 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 1.15.1 Les arguments dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . .75 1.15.2 Passage dargument par rfrence . . . . . . . . . . . . . . . . . . . . . . . .77 1.15.3 Passage dun tableau en argument . . . . . . . . . . . . . . . . . . . . . . . .78 1.15.4 Passage darguments out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 1.15.5 Passage dobjets en arguments . . . . . . . . . . . . . . . . . . . . . . . . . . 81 1.15.6 Arguments variables en nombre et en type . . . . . . . . . . . . . . . . .82 1.15.7 Les arguments nomms et/ou par dfaut . . . . . . . . . . . . . . . . . . . 84 1.16 Les pointeurs en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 1.16.1 La rservation de mmoire par stackalloc . . . . . . . . . . . . . . . . . . 90 9. LivreC-Net.book Page VIII Jeudi, 3. septembre 2009 10:58 10 C# et .NET versions 1 4 VIIICHAPITRE 2C# : les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932.1 Notions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .932.1.1 La classe comme type dinformation . . . . . . . . . . . . . . . . . . . . . . 932.1.2 Les objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942.1.3 Libration dobjet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.1.4 Accs aux champs dun objet . . . . . . . . . . . . . . . . . . . . . . . . . . .962.1.5 Valeur initiale des champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972.1.6 Champs const et readonly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972.1.7 Les mthodes dune classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .982.1.8 Un exemple dutilisation de classe . . . . . . . . . . . . . . . . . . . . . . . 992.1.9 Accs aux champs et mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . 992.1.10 Champs et mthodes de mme nom dans des classes diffrentes 1002.1.11 Les surcharges de mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . .1002.1.12 Le mot rserv this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012.1.13 Forme complte de dclaration de classe . . . . . . . . . . . . . . . . . . 1022.2 Construction et destruction dobjet . . . . . . . . . . . . . . . . . . . . . .1022.2.1 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1022.2.2 Constructeur statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1042.2.3 Les destructeurs en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042.3 Les tableaux dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1052.4Champs, mthodes et classes statiques . . . . . . . . . . . . . . . . . . . . 1062.5 Hritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072.5.1 Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1082.5.2 Notion dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1082.5.3 Pas dhritage multiple en C# . . . . . . . . . . . . . . . . . . . . . . . . . . .1092.5.4 Exemple dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.5.5 Rednition de mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122.5.6 Les fonctions virtuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142.5.7 .NET libre les objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162.5.8 Appel de mthodes caches par la rednition . . . . . . . . . . . 1172.5.9 Quel est le vritable objet instanci dans une rfrence ? . . . . . . 1172.5.10 Copie dobjet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.5.11 Comparaison dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1212.5.12 Le qualicatif sealed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222.6Les mthodes dextension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222.7 Surcharge doprateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232.7.1 Oprateurs de conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 10. LivreC-Net.book Page IX Jeudi, 3. septembre 2009 10:58 10Table des matires IX 2.8Protections sur champs et mthodes . . . . . . . . . . . . . . . . . . . . . 1262.8.1 Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 2.9Classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 2.10 Les interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282.10.1Classe implmentant une interface . . . . . . . . . . . . . . . . . . . . . . .1292.10.2Rfrence une interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1302.10.3Classe implmentant plusieurs interfaces . . . . . . . . . . . . . . . . . . 1302.10.4Comment dterminer quune classe implmente une interface ?131 2.11 Les proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 2.12 Les indexeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 2.13 Object comme classe de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 2.14 La classe Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 2.15 Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 2.16 Classes et mthodes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432.16.1Les classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432.16.2Les mthodes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 2.17 Les gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452.17.1Principes gnraux des gnriques . . . . . . . . . . . . . . . . . . . . . . .1452.17.2Implmentation dune pile sans recours aux gnriques . . . . . . .1452.17.3Implmentation dune pile avec les gnriques . . . . . . . . . . . . . .1462.17.4Contraintes appliques aux classes gnriques . . . . . . . . . . . . . .1492.17.5Les fonctions gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502.17.6Simplier lcriture des programmes . . . . . . . . . . . . . . . . . . . . .150 2.18 Le type Nullable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 2.19 Le type var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 2.20 Les types anonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 2.21 Le type dynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542.21.1Comparaison entre dynamic, var et object . . . . . . . . . . . . . . . . . 1552.21.2dynamic ou typage fort ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562.21.3Le DLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572.21.4Adaptation automatique en fonction du contenu . . . . . . . . . . . .1572.21.5Interfaage avec IronPython . . . . . . . . . . . . . . . . . . . . . . . . . . . .1602.21.6Interfaage avec Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 11. LivreC-Net.book Page X Jeudi, 3. septembre 2009 10:58 10C# et .NET versions 1 4XCHAPITRE 3Classes non visuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 3.1 Bibliothque de fonctions mathmatiques . . . . . . . . . . . . . . . . . 163 3.1.1La classe Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 3.1.2La classe Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 3.2 La classe de traitement de chanes . . . . . . . . . . . . . . . . . . . . . . . 167 3.2.1 Mise en format de chanes de caractres . . . . . . . . . . . . . . . . . . .173 3.2.2 Adaptation des rsultats diffrentes cultures . . . . . . . . . . . . . .177 3.2.3 Afcher toutes les cultures reconnues par Windows . . . . . . . . . .178 3.2.4 Modier le nombre de dcimales par dfaut . . . . . . . . . . . . . . . .178 3.2.5 La classe StringBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178 3.3Les expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 3.4 Classes de manipulation de dates et dheures . . . . . . . . . . . . . 184 3.4.1La structure DateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 3.4.2La structure TimeSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 3.4.3Mise en format de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 3.4.4Mesure dintervalles de temps . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 3.5 Classes encapsulant les types lmentaires . . . . . . . . . . . . . . . . 194 3.5.1Les oprations de boxing et dunboxing . . . . . . . . . . . . . . . . . . .194 3.5.2La classe Int32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 3.5.3Les autres classes dentiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197 3.5.4La classe Double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197 3.5.5Les autres classes de rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 3.5.6La classe Char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200 3.6 Classe de tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 3.6.1Tris et recherches dichotomiques . . . . . . . . . . . . . . . . . . . . . . . . . 204 3.7 Les structures Point, Rectangle et Size . . . . . . . . . . . . . . . . . . .206 3.7.1 La structure Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 3.7.2 La structure Rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 3.7.3 La structure Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209CHAPITRE 4Les classes conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 4.1 Les conteneurs dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 4.1.1 Les tableaux dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 12. LivreC-Net.book Page XI Jeudi, 3. septembre 2009 10:58 10 Table des matiresXI4.1.2 La classe Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2204.1.3 Les listes tries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2224.1.4 La classe Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2254.1.5 Les tableaux de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227 4.2Les conteneurs gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 4.3Les itrateurs en C# version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 CHAPITRE 5 Traitement derreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 5.1Les exceptions gnres par le systme . . . . . . . . . . . . . . . . . . . 2345.1.1 Parse et TryParse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 5.2Les clauses try et catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2355.2.1 Importance de lordre des catch . . . . . . . . . . . . . . . . . . . . . . . . . 237 5.3Le groupe nally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 5.4Propagation des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 5.5Gnrer une exception dans une mthode . . . . . . . . . . . . . . . . 243 CHAPITRE 6 Dlgus, vnements et expressions lambda . . . . . . . . . . . . . 245 6.1Les dlgus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 6.2Les vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 6.3Les mthodes anonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2526.3.1 La notion de closure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 6.4Expressions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 6.5Covariance et contravariance . . . . . . . . . . . . . . . . . . . . . . . . . . . 2566.5.1 Conversions de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2576.5.2 Contravariance des arguments des fonctions . . . . . . . . . . . . . . . .2586.5.3 Covariance de la valeur de retour des fonctions . . . . . . . . . . . . . 2596.5.4 Covariance des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2606.5.5 Pas de covariance pour les collections gnriques . . . . . . . . . . . 2616.5.6 Les choses ne sont jamais aussi simples quon ne le croit . . .2626.5.7 Cas des interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2646.5.8 Cas des dlgus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2646.5.9 Apport de C# version 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266 13. LivreC-Net.book Page XII Jeudi, 3. septembre 2009 10:58 10 C# et .NET versions 1 4 XIICHAPITRE 7Cration et dploiement de programmes . . . . . . . . . . . . . . . . . . . 269 7.1Cration dun programme C# . . . . . . . . . . . . . . . . . . . . . . . . . . . 2697.1.1Les outils disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2697.1.2Cration dun programme laide de Visual Studio . . . . . . . . . . 2707.1.3La fentre Explorateur de solutions . . . . . . . . . . . . . . . . . . . . . . . 2747.1.4Crer un nouveau projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2747.1.5Des options quil est souhaitable de modier . . . . . . . . . . . . . 2767.1.6Donner aux chiers des noms plus explicites . . . . . . . . . . . . . . . 2767.1.7Reprendre sous VS.NET des programmes crs avec le bloc-notes 2767.1.8Cacher limplmentation de fonctions . . . . . . . . . . . . . . . . . . . . . 2777.1.9Laide contextuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2777.1.10 Documentation automatique de programme . . . . . . . . . . . . . . . . 278 7.2Les techniques de remaniement de code . . . . . . . . . . . . . . . . . . 2827.2.1La refactorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2827.2.2Les extraits de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 7.3Outils de mise au point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2867.3.1Les classes Debug et Trace pour la mise au point . . . . . . . . . . . . 2877.3.2Rediriger les messages de sortie . . . . . . . . . . . . . . . . . . . . . . . . . 287 7.4Le compilateur C# intgr au run-time . . . . . . . . . . . . . . . . . . . 288 7.5Anatomie dun excutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2897.5.1Le cas des DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2907.5.2Les assemblages partags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 7.6Dploiement dapplication avec ClickOnce . . . . . . . . . . . . . . . . 296CHAPITRE 8Informations sur la conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 8.1Fonctions de conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3018.1.1Informations sur lcran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3038.1.2Informations sur lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 8.2Informations sur lenvironnement de Windows . . . . . . . . . . . . 304 8.3Accs la base de donnes de recensement (registry) . . . . . . . 305 8.4Le chier de conguration de programme . . . . . . . . . . . . . . . . 309 14. LivreC-Net.book Page XIII Jeudi, 3. septembre 2009 10:58 10 Table des matiresXIIICHAPITRE 9Threads et excutions parallles sur multicurs . . . . . . . . . . 313 9.1 Les processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 9.1.1 Excuter un programme ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 9.1.2 Obtenir des informations sur un processus . . . . . . . . . . . . . . . . . 317 9.1.3 Autre manire de dmarrer un processus ls . . . . . . . . . . . . . . .317 9.1.4 Redirection des entres/sorties du programme ls . . . . . . . . . . .319 9.1.5 Envoyer des squences de caractres une application . . . . . . . 319 9.1.6 Naccepter quune seule instance de programme . . . . . . . . . . . . 321 9.2 Les threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 9.2.1 Principe des threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .322 9.2.2 Excution de threads dans des programmes Windows . . . . . . . .326 9.2.3 Les fonctions asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 9.2.4 Le composant BackgroundWorker . . . . . . . . . . . . . . . . . . . . . . . 331 9.2.5 Les niveaux de priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 9.3 Les sections critiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .334 9.3.1 La classe Interlocked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 9.3.2 La classe Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 9.3.3 Les verrouillages par objet ReaderWriterLock . . . . . . . . . . . . . .337 9.4Les mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 9.5 Extensions pour traitements parallles en C# version 4 . . . . .341 9.5.1 Traitement parallle dans Linq . . . . . . . . . . . . . . . . . . . . . . . . . .342 9.5.2 Lancement de tches en parallle . . . . . . . . . . . . . . . . . . . . . . . .343 9.5.3 Les mthodes de la classe Parallel . . . . . . . . . . . . . . . . . . . . . . . .344 9.5.4 Les collections gnriques concurrentes . . . . . . . . . . . . . . . . . . . 346CHAPITRE 10volution de la programmation Windows . . . . . . . . . . . . . . . . . . . 349 10.1 Dveloppement en C avec le SDK de Windows . . . . . . . . . . . .349 10.1.1 Logique de programmation inverse entre DOS et Windows . . . 350 10.1.2 Pas aussi simple que pour le mode console . . . . . . . . . . . . . . . . .350 10.1.3 Le point dentre dun programme Windows . . . . . . . . . . . . . . . 350 10.1.4 Lapplication minimale en C . . . . . . . . . . . . . . . . . . . . . . . . . . . .351 10.2 La notion de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 10.2.1 La boucle de messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 10.2.2 La fonction de traitement de messages . . . . . . . . . . . . . . . . . . . . 354 15. LivreC-Net.book Page XIV Jeudi, 3. septembre 2009 10:58 10C# et .NET versions 1 4 XIV 10.3 Crer des contrles Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 10.3.1 Les contextes de priphrique . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 10.3.2 La persistance des afchages et le message WM_PAINT . . . . . . 356 10.4Les frameworks OWL et MFC . . . . . . . . . . . . . . . . . . . . . . . . . . 357 10.5 Interoprabilit COM/DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 10.5.1 Appeler des fonctions de lAPI Windows . . . . . . . . . . . . . . . . . . 359 10.5.2 Composants COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 CHAPITRE 11 Les fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 11.1 Crer une application Windows . . . . . . . . . . . . . . . . . . . . . . . . .365 11.1.1 La fentre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 11.1.2 Modier les noms choisis par dfaut . . . . . . . . . . . . . . . . . . . . . .367 11.1.3 Des options quil est souhaitable de modier . . . . . . . . . . . . . . . 368 11.1.4 Le squelette de programme gnr par Visual Studio . . . . . . . . . 369 11.1.5 Pourquoi une classe de fentre ? . . . . . . . . . . . . . . . . . . . . . . . . . 372 11.1.6 Les principales proprits dune fentre . . . . . . . . . . . . . . . . . . . 373 11.1.7 Fentre de dveloppement et fentre dexcution . . . . . . . . . . . .374 11.1.8 La grille de la fentre de dveloppement . . . . . . . . . . . . . . . . . . . 375 11.2Les proprits de la fentre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 11.3Proprits run-time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 11.4Les vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 11.5Les mthodes lies aux fentres . . . . . . . . . . . . . . . . . . . . . . . . . . 384 CHAPITRE 12 Clavier, souris et messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 12.1 Le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 12.1.1 Les vnements lis au clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 12.1.2 Faire gnrer la fonction de traitement . . . . . . . . . . . . . . . . . . . .386 12.1.3 Le code des touches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .388 12.1.4 Lvnement KeyPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 12.2 La souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 12.2.1 Les vnements lis la souris . . . . . . . . . . . . . . . . . . . . . . . . . . 391 12.3 Traitement dvnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 12.3.1 Traitement de longue dure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 12.3.2 Traiter nimporte quel vnement . . . . . . . . . . . . . . . . . . . . . . . . 394 16. LivreC-Net.book Page XV Jeudi, 3. septembre 2009 10:58 10Table des matires XV12.4 Drag & drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39712.5 Lhorloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 CHAPITRE 13 Les tracs avec GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40313.1 Les objets du GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40313.1.1 Comment spcier une couleur ? . . . . . . . . . . . . . . . . . . . . . . . . 40313.1.2 Les polices de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40913.1.3 Les stylos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41113.1.4 Les pinceaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41313.2 Les mthodes de la classe Graphics . . . . . . . . . . . . . . . . . . . . . . 41513.2.1 Obtention dun objet Graphics . . . . . . . . . . . . . . . . . . . . . . . . . .42013.2.2 Afchage de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42113.2.3 Afchage de formes gomtriques . . . . . . . . . . . . . . . . . . . . . . .42213.2.4 Afchage dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42313.2.5 Les images en ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42513.2.6 La classe BufferedGraphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42813.2.7 Traitement dimage en GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . 42913.3 Lvnement Paint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 CHAPITRE 14 Composants et hirarchie de classes . . . . . . . . . . . . . . . . . . . . . . . 43914.1 Composants de Visual Studio .NET . . . . . . . . . . . . . . . . . . . . . . 43914.2 Hirarchie des classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44014.2.1 Tout part de la classe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44014.2.2 Control, premire classe de base pour les composants . . . . . . . . 44014.3 Oprations pratiques sur les composants . . . . . . . . . . . . . . . . .44414.3.1 Placement dun composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44414.3.2 Modier une proprit de composant . . . . . . . . . . . . . . . . . . . . . 44414.3.3 Donner la mme proprit plusieurs composants . . . . . . . . . . .44514.3.4 Gnrer une fonction de traitement . . . . . . . . . . . . . . . . . . . . . . . 44514.3.5 Placement des composants les uns par rapport aux autres . . . . .44514.3.6 Le passage du focus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44614.3.7 Ancrage des composants par rapport la fentre mre . . . . . . . . 44614.3.8 Accoler un contrle un bord de fentre . . . . . . . . . . . . . . . . . . 44714.3.9 Bulle daide sur composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44714.4 Adaptation automatique la langue de lutilisateur . . . . . . . . 448 17. LivreC-Net.book Page XVI Jeudi, 3. septembre 2009 10:58 10C# et .NET versions 1 4 XVI CHAPITRE 15 Boutons et cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 15.1Les boutons de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45115.1.1Insrer un bouton dans une fentre . . . . . . . . . . . . . . . . . . . . . . . 45115.1.2Boutons dans bote de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . 45315.1.3Les proprits des boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45315.1.4Les vnements lis aux boutons . . . . . . . . . . . . . . . . . . . . . . . . .45415.1.5Effets de survol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45615.1.6Traiter plusieurs boutons par une mme mthode . . . . . . . . . . . . 456 15.2Les cases cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45715.2.1Types de cases cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45715.2.2Proprits des cases cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45815.2.3Les vnements lis aux cases cocher . . . . . . . . . . . . . . . . . . . 458 15.3Les cases doption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 15.4Les groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 CHAPITRE 16 Les botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 16.1Les botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46316.1.1Cration dune bote de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . .46416.1.2Les proprits des botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . 46416.1.3Insrer des articles dans la bote de liste . . . . . . . . . . . . . . . . . . .46616.1.4Proprits run-time des botes de liste . . . . . . . . . . . . . . . . . . . . .46616.1.5Les vnements lis aux botes de liste . . . . . . . . . . . . . . . . . . . .46716.1.6Comment insrer des articles par programme ? . . . . . . . . . . . . . 46816.1.7Comment associer une valeur unique un article ? . . . . . . . . . . .46916.1.8Comment spcier des tabulations ? . . . . . . . . . . . . . . . . . . . . . . 47016.1.9Bote de liste avec images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 16.2Bote de liste avec cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 16.3Les botes combo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47416.3.1Les types de botes combo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47416.3.2Proprits des botes combo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 16.4Les listes en arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47616.4.1Les nuds des listes en arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47616.4.2Les proprits des listes en arbre . . . . . . . . . . . . . . . . . . . . . . . . . 478 18. LivreC-Net.book Page XVII Jeudi, 3. septembre 2009 10:58 10Table des matiresXVII 16.4.3 Loutil de cration de listes en arbre . . . . . . . . . . . . . . . . . . . . . . 479 16.4.4 Les vnements lis aux listes en arbre . . . . . . . . . . . . . . . . . . . . 480 16.4.5 Comment ajouter des articles en cours dexcution ? . . . . . . . . . 480 16.5 Les fentres de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .483 16.5.1 Comment spcier les colonnes ? . . . . . . . . . . . . . . . . . . . . . . . .485 16.5.2 Comment remplir la fentre de liste ? . . . . . . . . . . . . . . . . . . . . .486 16.5.3 Personnalisation de ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 16.6 Le composant DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 16.6.1 Remplir la grille partir du contenu dun DataTable . . . . . . . . . 493 16.6.2 Remplir la grille partir du contenu dun tableau ou dune collection 495 16.6.3 lments de prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 16.6.4 Modier des en-ttes de colonnes . . . . . . . . . . . . . . . . . . . . . . . . 495 16.6.5 Redimensionner colonnes et ranges . . . . . . . . . . . . . . . . . . . . . 496 16.6.6 Modier lapparence des cellules . . . . . . . . . . . . . . . . . . . . . . . . 498 16.6.7 Le contenu des cellules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 16.6.8 Modier le style dune cellule . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 16.6.9 Dessiner dans une cellule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 16.6.10 Les diffrentes reprsentations de cellules . . . . . . . . . . . . . . . . . 502 16.6.11 Colonne avec case cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 16.6.12 Colonne avec bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 16.6.13 Photo dans une colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 CHAPITRE 17 Zones dafchage et ddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 17.1Caractristiques des zones dafchage . . . . . . . . . . . . . . . . . . . 508 17.2Zones dafchage en hyperlien . . . . . . . . . . . . . . . . . . . . . . . . . . 509 17.3 Caractristiques des zones ddition . . . . . . . . . . . . . . . . . . . . . 512 17.3.1 Les proprits des zones ddition . . . . . . . . . . . . . . . . . . . . . . . 512 17.3.2 Associer un raccourci clavier une zone ddition . . . . . . . . . . . 515 17.3.3 Initialiser et lire le contenu dune zone ddition . . . . . . . . . . . .515 17.4Les zones ddition avec masque de saisie . . . . . . . . . . . . . . . . . 516 17.5Les contrles Up and down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 CHAPITRE 18 Barres de menu, dtat et de boutons . . . . . . . . . . . . . . . . . . . . . . . 521 18.1 Le menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 18.1.1 Construire un menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 19. LivreC-Net.book Page XVIII Jeudi, 3. septembre 2009 10:58 10C# et .NET versions 1 4XVIII18.1.2Les classes de menu et darticles . . . . . . . . . . . . . . . . . . . . . . . . . 52218.1.3Modication de menu par programme . . . . . . . . . . . . . . . . . . . . 52318.1.4Les vnements lis au menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 52518.1.5Les menus contextuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 18.2 Les listes dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 18.3 La barre doutils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52818.3.1Les diffrents types de boutons dans une barre doutils . . . . . . . 52918.3.2Les autres types de composants dans une barre doutils . . . . . . . 529 18.4 La barre dtat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531CHAPITRE 19Botes de dialogue et fentres spciales . . . . . . . . . . . . . . . . . . . . 533 19.1 La classe MessageBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 19.2 Les botes de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53519.2.1Bote de dialogue non modale . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 19.3 Les pages de proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 19.4 Les fentres de prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 19.5 Le composant SplitContainer . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 19.6 Les fentres MDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 19.7 Fentre de nimporte quelle forme . . . . . . . . . . . . . . . . . . . . . . . 544 19.8 Le composant WebBrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 19.9 Les botes de slection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54619.9.1Les botes de slection ou de sauvegarde de chier . . . . . . . . . .54619.9.2La bote de slection de dossier . . . . . . . . . . . . . . . . . . . . . . . . . .55019.9.3La bote de slection de police de caractres . . . . . . . . . . . . . . . . 55119.9.4La bote de slection de couleur . . . . . . . . . . . . . . . . . . . . . . . . .552CHAPITRE 20Les composants de dlement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 20.1 Les barres de dlement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55520.1.1Application des barres de dlement . . . . . . . . . . . . . . . . . . . . . . 558 20.2 Les barres gradues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 20.3 Les barres de progression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 20. LivreC-Net.book Page XIX Jeudi, 3. septembre 2009 10:58 10 Table des matires XIX CHAPITRE 21 Les impressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 0.1 Lobjet PrintDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 0.2 Caractristiques dimpression . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 0.3 Prvisualisation dimpression . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 0.4 Problmes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 CHAPITRE 22 Programmation rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 22.1Les protocoles rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 22.2 Programmation socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .575 22.2.1 Les oprations effectuer dans la pratique . . . . . . . . . . . . . . . . . 577 22.2.2 Des amliorations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .579 22.2.3 Les oprations asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . .581 22.3Les classes TcpClient et TcpListener . . . . . . . . . . . . . . . . . . . . . 582 CHAPITRE 23 Accs aux chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 23.1La classe DriveInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 23.2 Les classes Directory et DirectoryInfo . . . . . . . . . . . . . . . . . . . . 586 23.2.1 La classe Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 23.2.2 La classe DirectoryInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 23.3 Les classes File et FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 23.3.1 La classe File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 23.3.2 La classe FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 23.4 La classe Stream et ses classes drives . . . . . . . . . . . . . . . . . . . 594 23.4.1 La classe abstraite Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 23.4.2 La classe FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 23.5 Les classes de lecture/criture . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 23.5.1 La classe StreamReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .597 23.5.2 Le problme de nos lettres accentues . . . . . . . . . . . . . . . . . . . . 599 23.5.3 La classe StreamWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .600 23.5.4 La classe BinaryReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .601 23.5.5 La classe BinaryWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .605 23.5.6 La classe StringReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .606 21. LivreC-Net.book Page XX Jeudi, 3. septembre 2009 10:58 10C# et .NET versions 1 4 XX 23.6Srialisation et dsrialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 23.7 Encodage des caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 23.7.1 Comment reconnatre le type de chier de texte ? . . . . . . . . . . . . 613 CHAPITRE 24 Accs aux bases de donnes avec ADO.NET . . . . . . . . . . . . . . . 615 24.1 Les objets de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616 24.1.1 Les chanes de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .619 24.1.2 Cas dune base de donnes Access . . . . . . . . . . . . . . . . . . . . . . .620 24.1.3 Cas dune base de donnes SQL Server avec driver Ole-Db . . . . 621 24.1.4 Cas dune base de donnes SQL Server . . . . . . . . . . . . . . . . . . .621 24.1.5 Les autres attributs de la chane de connexion . . . . . . . . . . . . . . .621 24.1.6 Chanes de connexion pour dautres SGBD . . . . . . . . . . . . . . . . 622 24.1.7 Les vnements lis la connexion . . . . . . . . . . . . . . . . . . . . . . .622 24.2 Les fabriques de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .623 24.3Les schmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 24.4 Les modes de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .627 24.4.1 Le mode connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .627 24.4.2 Le mode dconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .628 24.5 Le mode connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .628 24.5.1 Excuter une commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 24.5.2 Exemple de commande renvoyant une valeur . . . . . . . . . . . . . . .630 24.5.3 Exemple dajout dans une table . . . . . . . . . . . . . . . . . . . . . . . . . .630 24.5.4 Accs aux donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 24.5.5 Parcourir le rsultat dun SELECT . . . . . . . . . . . . . . . . . . . . . . . 633 24.5.6 Format de dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 24.5.7 Plusieurs DataReader en action sur une mme connexion . . . . . 634 24.5.8 Les oprations asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . .635 24.5.9 Modications, accs concurrents et transactions . . . . . . . . . . . . . 637 24.5.10 Les accs concurrents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .638 24.5.11 Les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 24.6 Le mode dconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .641 24.6.1 Les objets dadaptation de donnes . . . . . . . . . . . . . . . . . . . . . . .642 24.6.2 Lobjet DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644 24.6.3 Contenu et structure dune table . . . . . . . . . . . . . . . . . . . . . . . . .646 24.6.4 Informations sur les diffrentes colonnes de la table . . . . . . . . . . 647 24.6.5 Lobjet DataColumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .647 24.6.6 Lobjet DataRow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 22. LivreC-Net.book Page XXI Jeudi, 3. septembre 2009 10:58 10 Table des matires XXI 24.6.7 Les contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 24.6.8 Mappage de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651 24.6.9 Les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652 24.6.10 Accs une feuille Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .654 24.6.11 Accs un chier XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .655 24.6.12 Modications dans le dataset . . . . . . . . . . . . . . . . . . . . . . . . . . 655 24.7 Les procdures stockes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 24.7.1 Premier exemple de procdure stocke . . . . . . . . . . . . . . . . . . . .662 24.7.2 Deuxime exemple de procdure stocke . . . . . . . . . . . . . . . . . . 663 24.7.3 Troisime exemple de procdure stocke . . . . . . . . . . . . . . . . . .663 CHAPITRE 25 Liaisons de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 25.1 Liaison avec bote de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 25.2 Liaison avec zone ddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 25.3 Les composants lis aux bases de donnes . . . . . . . . . . . . . . . . 668 CHAPITRE 26 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 26.1 Crer un chier XML laide de Visual Studio . . . . . . . . . . . . 676 26.2 Les classes XmlTextReader et XmlTextWriter . . . . . . . . . . . . 676 26.3 La classe XmlDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 26.4 XML et les dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 26.5 Les transformations XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 CHAPITRE 27 Accs aux donnes avec Linq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 27.1 Linq to Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 27.1.1 La syntaxe Linq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688 27.1.2 Slections dans Linq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .689 27.1.3 Groupes dans Linq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 27.1.4 Jointures dans Linq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691 27.1.5 Les mthodes dextension de Linq . . . . . . . . . . . . . . . . . . . . . . .692 27.2 Linq to SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 27.2.1 Les classes cres par Visual Studio . . . . . . . . . . . . . . . . . . . . . . 696 27.2.2 Lobjet DataContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696 23. LivreC-Net.book Page XXII Jeudi, 3. septembre 2009 10:58 10C# et .NET versions 1 4XXII27.2.3Tenir compte des liaisons entre tables . . . . . . . . . . . . . . . . . . . . . 69727.2.4Les oprations de modication . . . . . . . . . . . . . . . . . . . . . . . . . . 69827.2.5Travailler directement en SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 699 27.3 Linq to XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699 27.3.1 Chargement du chier XML . . . . . . . . . . . . . . . . . . . . . . . . . . . .700 27.3.2 Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701 27.3.3 Retrouver les noms des personnages . . . . . . . . . . . . . . . . . . . . . .702 27.3.4 Retrouver les prnoms des personnages . . . . . . . . . . . . . . . . . . . 702 27.3.5 Dtecter si une balise contient une ou plusieurs balises . . . . . . .703 27.3.6 Retrouver les attributs dune balise . . . . . . . . . . . . . . . . . . . . . . .703 27.3.7 Amlioration du select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .703 27.3.8 Convertir le rsultat dune recherche en un tableau ou une liste .704 27.3.9 Cration dobjets dune classe partir de balises . . . . . . . . . . . .704 27.3.10 Les contraintes et les tris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .705CHAPITRE 28Programmation ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707 28.1 Introduction la programmation Web ct serveur . . . . . . . . 709 28.1.1 Page HTML statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709 28.1.2 Interactivit dans une page Web . . . . . . . . . . . . . . . . . . . . . . . . . 710 28.1.3 Page ASP avec bouton, zone ddition et zone dafchage . . . . . 711 28.1.4 Le contenu du chier aspx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 28.1.5 Analyse dune balise asp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 28.1.6 vnement trait ct serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 28.1.7 Conversion en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 28.1.8 Le ViewState . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 28.1.9 Les vnements signals sur le serveur lors dun chargement de page 719 28.1.10 La technique du code-behind . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721 28.1.11 Utilisation des classes .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 28.2 Le code ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 28.2.1 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .723 28.2.2 Afcher des donnes sans utiliser de composant ASP.NET . . . .724 28.2.3 Excuter du code C# dans du HTML . . . . . . . . . . . . . . . . . . . . .725 28.2.4 Mise au point du code C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .727 28.3 Utilisation de Visual Studio ou de Visual Web Developer . . . . 728 28.3.1 Le choix de la norme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730 28.3.2 Positionnement des composants dans la page . . . . . . . . . . . . . . . 731 24. LivreC-Net.book Page XXIII Jeudi, 3. septembre 2009 10:58 10 Table des matires XXIII28.3.3Les contrles HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73128.3.4Les contrles simples de Web Forms . . . . . . . . . . . . . . . . . . . . .73228.3.5Changements apports par ASP.NET version 2 . . . . . . . . . . . . .74128.3.6Des exemples de composants simples dASP.NET . . . . . . . . . . .74228.3.7Exemples relatifs aux autres composants simples . . . . . . . . . . . . 74428.3.8Le composant AdRotator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74728.3.9Les autres composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 28.4Les contrles de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75228.4.1Validation ct serveur avec une fonction crite en C# . . . . . . . . 75528.4.2Validation ct client avec une fonction crite en JavaScript . . . 75628.4.3Les groupes de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 28.5Attributs et feuilles de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 28.6Les pages matres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76128.6.1Cration dune page matre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76328.6.2Cration de pages de contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . 76528.6.3Accder la page matre partir dune page de contenu . . . . . . 767 28.7Les composants de navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . 76728.7.1Le composant BulletedList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76828.7.2Le TreeView et le sitemap (plan de site) . . . . . . . . . . . . . . . . . . .77028.7.3Le composant Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77228.7.4Le composant SiteMapPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77228.7.5Le composant TreeView associ un chier XML . . . . . . . . . . . 773 28.8Scurit dans ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77428.8.1La base de donnes des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . 77528.8.2Reconnatre les utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77828.8.3Les classes lies la scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782 28.9Techniques de personnalisation . . . . . . . . . . . . . . . . . . . . . . . . . 78528.9.1Le prol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78628.9.2Les thmes et les chiers dapparence . . . . . . . . . . . . . . . . . . . . 787 28.10 Accs aux bases de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78828.10.1 Les botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78828.10.2 La grille de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79328.10.3 Le composant Repeater . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81728.10.4 Le composant DataList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81928.10.5 Le composant DetailsView . . . . . . . . . . . . . . . . . . . . . . . . . . . . .821 25. LivreC-Net.book Page XXIV Jeudi, 3. septembre 2009 10:58 10C# et .NET versions 1 4 XXIV 28.11 Les classes dASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822 28.11.1 Les paramtres de la requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824 28.11.2 Les cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826 28.11.3 Reprsentations graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827 28.12 Les contrles utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829 28.12.1Les objets Application et Session . . . . . . . . . . . . . . . . . . . . . . . 833 28.13 Localisation des pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834 28.14 JavaScript dans les programmes ASP.NET . . . . . . . . . . . . . . . 837 28.14.1Comment insrer des instructions JavaScript ? . . . . . . . . . . . . 837 28.14.2Effet de survol sur une image . . . . . . . . . . . . . . . . . . . . . . . . . . 839 28.14.3Mettre en vidence la zone ddition qui a le focus . . . . . . . . 840 28.14.4Spcier dynamiquement un traitement JavaScript . . . . . . . . . 841 28.14.5vnement li au chargement de la page . . . . . . . . . . . . . . . . .841 28.14.6Traiter le clic sur un bouton, ct client . . . . . . . . . . . . . . . . . .842 28.14.7Traiter le clic sur un bouton, dabord ct client puis ct serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .842 28.14.8Afchage dune fentre pop-up . . . . . . . . . . . . . . . . . . . . . . . . 843 28.14.9Travail en frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844 28.14.10 Redimensionnement et centrage de la fentre du navigateur . . 845 28.14.11 Dbogage de JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .846 28.14.12 Insertion dynamique de scripts . . . . . . . . . . . . . . . . . . . . . . . . .846 28.14.13 Passer une valeur au JavaScript . . . . . . . . . . . . . . . . . . . . . . . . 848 28.14.14 Passage dun tableau au JavaScript . . . . . . . . . . . . . . . . . . . . . .849 28.14.15 Barre de progression dmarre partir du serveur . . . . . . . . . . 850 28.14.16 Le DOM, Document Object Model . . . . . . . . . . . . . . . . . . . . . 851 28.14.17 Proprits et fonctions du DOM . . . . . . . . . . . . . . . . . . . . . . . .852 28.15 AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854 28.15.1Le composant UpdatePanel . . . . . . . . . . . . . . . . . . . . . . . . . . .855 28.15.2Les mises jour conditionnelles . . . . . . . . . . . . . . . . . . . . . . . .857 28.15.3Le composant UpdateProgress . . . . . . . . . . . . . . . . . . . . . . . . . 858 28.15.4LAJAX Control Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .859 CHAPITRE 29 Les services Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861 29.1Introduction aux services Web . . . . . . . . . . . . . . . . . . . . . . . . . . 861 29.2Le protocole SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862 26. LivreC-Net.book Page XXV Jeudi, 3. septembre 2009 10:58 10 Table des matires XXV29.3 Crer et utiliser un service Web asmx . . . . . . . . . . . . . . . . . . . .86429.3.1 Cration manuelle du chier asmx . . . . . . . . . . . . . . . . . . . . . . . 86429.3.2 Cration dun service Web asmx laide de Visual Studio . . . . . 86829.3.3 Client de service Web asmx . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86929.4 Les services Web avec WCF . . . . . . . . . . . . . . . . . . . . . . . . . . . .87129.5 Services Web REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87529.5.1 Principes de REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87529.5.2 Cration dun service Web REST sur le serveur . . . . . . . . . . . . .87629.5.3 Client dun service Web REST . . . . . . . . . . . . . . . . . . . . . . . . . . 880 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883 27. LivreC-Net.book Page XXVI Jeudi, 3. septembre 2009 10:58 10 28. LivreC-Net.book Page 1 Jeudi, 3. septembre 2009 10:58 10Introduction larchitecture .NETLe concepteur et responsable du projetAvant mme dexpliquer dans les grandes lignes ce que sont larchitecture .NET (les Amri-cains prononcent dot net) et le nouveau langage C# (prononcer C sharp , mme chez nous)de Microsoft, il faut parler de son concepteur et principal architecte chez Microsoft. Son nom,Anders Hejlsberg, ne vous dit sans doute rien. Et pourtantAnders Hejlsberg est n au Danemark en 1961. En 1983, il rencontre leFranais Philippe Kahn, tabli en Californie, et lui prsente la premireversion dun logiciel quil est en train dcrire. Il sagit dun logiciel dedveloppement de programmes, fond sur le langage Pascal, duneconvivialit et dune puissance inconnues lpoque. Le rsultat decette rencontre est une success story qui a marqu le monde des outilsde dveloppement : celle de la socit Borland et de son produit phare,Turbo Pascal. Dans sa version Turbo Pascal, le langage Pascal est eneffet considrablement dop par rapport sa version dorigine, dont lesuccs tait jusque-l limit aux milieux acadmiques. Avec ce produit,Anders Hejlsberg montrait dj son souci de fournir des outils rpondant aux besoins et attentesdes dveloppeurs.Au dbut des annes 1990, Anders Hejlsberg et Borland ritrent le succs de Turbo Pascal avecDelphi, galement fond sur le langage Pascal, qui bouleverse cette fois la manire de dve-lopper des programmes Windows. quelques annes de distance (le dbut de lre DOS pourTurbo Pascal et le dbut de lre Windows pour Delphi), Anders Hejlsberg devait donc conce-voir sous la bannire Borland des produits qui ont suscit admiration et respect chez les dve-loppeurs soucieux la fois de convivialit et defcacit. Jusqualors, ces derniers taientrsigns des outils peu puissants, peu performants ou alors totalement dpourvus de convivia-lit (ce qui nempchait pas et nempche dailleurs toujours pas certains dveloppeurs de tirergloire dun dveloppement la spartiate). Anders Hejlsberg prouvait que lon pouvait allierpuissance, efcacit, lgance et convivialit. Ses ajouts au langage Pascal devaient tre massi-vement adopts par les dveloppeurs, au point den faire, dans la pratique, une norme de fait dulangage. 29. LivreC-Net.book Page 2 Jeudi, 3. septembre 2009 10:58 10 C# et .NET versions 1 4 2 Avec Turbo Pascal et Delphi, les dveloppeurs trouvaient en Hejlsberg un pair, lcoute de leurs problmes et soucieux dapporter des solutions concrtes. Avec Delphi, les dveloppeurs dcouvraient et pratiquaient le recours tendu aux composants, faisant de Delphi une vritable bote outils de composants logiciels. Certes, les thoriciens de la programmation oriente objet prnaient dj depuis quelque temps la rutilisabilit et le dveloppement partir de briques logicielles mais sans vraiment proposer quoi que ce soit de bien utile rutiliser. Anders Hejlsberg eut lart de mettre ces ides en pratique, et cela sans faire de dclarations fracassantes et mme plutt en toute discrtion. Le nom dAnders Hejlsberg restait peu connu en dehors de Borland et dune couche priph- rique. Les utilisateurs de Delphi pouvaient nanmoins le dcouvrir condition de connatre la manire dafcher luf de Pques (cest--dire la commande cache) de Delphi : Aide A propos, maintenir la touche ALT enfonce et taper, selon la version de Delphi : AND ou TEAM ou DEVELOPERS ou encore VERSION. Une photo dun Anders hilare apparaissait mme dans luf de Pques de lune des versions de Delphi. Figure I-2 Figure I-3 En octobre 1996, Microsoft, la trane pour ce genre doutils, dbauche Anders Hejlsberg avec des conditions presque dignes dune vedette du sport. Dans la foule, Microsoft dbauche une trentaine dautres dveloppeurs de Borland, ce qui est norme quand on sait que la conception et la ralisation de tels outils mobilisent rarement une foule de dveloppeurs, mais au contraire une poigne dinformaticiens comptents, efcaces et motivs. Chez Microsoft, Anders conoit dabord WFC (Windows Foundation Classes), cest--dire les classes Java pour interface graphique Windows. Le but tait de permettre aux programmeurs en Visual J++ (la version Microsoft du compilateur Java) de dvelopper des applications 30. LivreC-Net.book Page 3 Jeudi, 3. septembre 2009 10:58 10Introduction larchitecture .NET 3professionnelles dignes de ce nom. En effet, lpoque, ntaient disponibles pour le dvelop-pement Windows en Java que les classes AWT (Abstract Window Toolkit) de Sun, des classesqui ne pouvaient satisfaire que des dveloppeurs vraiment peu exigeants (classes dailleursaujourdhui largement dlaisses au prot de Swing).Les relations entre Anders Hejlsberg et la communaut ofcielle de Java devaient vitesenvenimer, car les classes WFC, bien que nettement plus professionnelles que ce qui tait lpoque disponible en provenance de Sun, taient propres Windows et incompatibles avec lesautres systmes, donc non conformes la philosophie Java.Dire que James Gosling, le concepteur de Java, napprcie gure Anders Hejlsberg relve deleuphmisme. Lors de la confrence Java One de San Francisco en 1998, Gosling commentedailleurs WFC en ces termes, gratignant au passage Anders Hejlsberg : something bizarrefrom Mr Method Pointers, pour ne reprendre que la moins assassine de ses phrases, largementreprises par la presse spcialise de lpoque.En dcembre 2008 dbutait chez Microsoft, dans le plus grand secret, le dveloppement dunenouvelle architecture de dveloppement. Dans la foule, un nouveau langage tait cr sous lenom de code COOL (pour C-like Object Oriented Language). Le nom dnitif devait tre C#,langage qui est devenu, et de loin, le premier langage de dveloppement dans le monde Microsoft.Pourquoi ce nom de C# ? Le C videmment pour attester de lappartenance au monde C et C++.Et le # (croisillon) ? En notation musicale amricaine, # indique un ton au-dessus . On peutaussi voir dans # quatre + disposs en carr, ce qui voque C++++, la signication videntepour les programmeurs.Quen est-il aujourdhui dun antagonisme, rel ou imaginaire, avec Java ? Sun et Microsoftroulent dsormais sur des voies o le croisement est tout simplement vit : en juin 2000,Microsoft annonce, en mme temps que la disparition de Visual J++ de sa gamme de produits,larrive de larchitecture .NET et du langage C# dont Anders Hejlsberg est le principal concepteur.Un an plus tard, Visual J++ fait nanmoins sa rapparition (sous le nom de Visual J#) sans toute-fois attirer les projecteurs, quasiment dans lindiffrence. Visual J# est aujourdhui abandonn,faute de combattants.Ce que .NET changePour la version 7 (2002) de loutil de dveloppement Visual Studio (version rebaptiseVisual Studio .NET), Microsoft a conu un systme qui rend le dveloppement dapplicationsWindows et Web bien plus ais. Une nouvelle architecture a t mise au point, des langages ontt modis et un nouveau langage cr, le C# qui devient le langage de rfrence et principallangage pour Microsoft. Le C++ est certes encore prsent, mais rarissimes sont aujourdhui lesfragments et exemples de code en C++ dans la documentation de Microsoft, les articles ououvrages consacrs .NET (y compris et peut-tre mme surtout, ceux rdigs par des collabo-rateurs de Microsoft). Le fait que les applications Web (ct serveur) doivent tre imprative-ment crites en C# ou VB.NET est encore plus signicatif. Des efforts considrables ontgalement t dploys pour faire de Visual Basic un langage de premire catgorie.Visual Basic, rebaptis VB.NET, devient un langage orient objet, au mme titre que le C# et se 31. LivreC-Net.book Page 4 Jeudi, 3. septembre 2009 10:58 10 C# et .NET versions 1 4 4 dmarque ainsi nettement de la version 6 de Visual Basic (plus aucun nouveau dveloppement pour ce produit et n du support annonce). Rien ne semble aujourdhui exister chez Microsoft en dehors de .NET. Mme DirectX (la librairie danimation graphique 3D hautes performances) et XNA (la version correspondante pour, notamment, la console de jeu XBox) se programment aujourdhui essentiellement, voire exclusivement, en C#. .NET constitue-t-il une rvolution dans la manire de concevoir et dutiliser les programmes ? La rponse est incontestablement afrmative pour la manire de concevoir et dcrire des programmes : les programmeurs C++ habitus au dveloppement la dure avec MFC dcouvri- ront, surtout sils passent au C# (ce qui constitue un jeu denfant pour eux), la facilit de Delphi et du vritable dveloppement partir de briques logicielles. Les programmeurs en Visual Basic dcouvriront un environnement de dveloppement entirement orient objet, comparable lorientation objet du C++ et du C# (et sans rien avoir envier ces deux gants). Dans tous les cas, le dveloppement dapplications Web et surtout de services Web savre bien plus facile. crire une application Web devient en effet presque aussi simple que lcriture dune application Windows. Lautre rvolution est limportance accorde aux services Web. Visual Studio rend dailleurs leur implmentation dune facilit dconcertante, ce qui favorise ladoption de cette technologie par les dveloppeurs. En gros, un service Web est une fonction qui sexcute quelque part sur Internet, comme sil sagissait dune fonction excute localement. Rsultat : on simplie le dveloppement du programme en dportant des fonctionnalits sur des sites spcialiss fournis- sant tel ou tel service. Depuis Visual Studio 2008, Microsoft a ouvert, avec REST, le dveloppement de services Web au monde non-Microsoft. .NET implique-t-il des changements quant la manire dutiliser les applications ? La rponse est, la fois, un peu oui et surtout non. Visual Studio permet en effet dcrire les applications Windows les plus traditionnelles, sexcutant sur des machines ddies et mme non connectes un rseau local ou Internet. Mais Visual Studio permet aussi dcrire, avec la mme simpli- cit et les mmes techniques, des applications pour appareils mobiles (appareils divers sous Windows CE, Pocket PC et smartphones) et des applications Web. Pourquoi un peu oui ? La mutation au prot des services Web implique une connexion performante et permanente au rseau Internet, ce qui tend devenir la norme aujourdhui. Les serveurs Internet ne se conten- teront plus bientt de fournir des pages HTML statiques ou dynamiques : ils fourniront surtout des services Web aux applications. Ces serveurs Internet serviront aussi de plus en plus, grce la technologie ClickOnce, dployer et mettre jour des applications Windows. .NET est-il signicatif dun changement dattitude chez Microsoft ? Cette socit a souvent t blme pour son manque de respect des normes mais aussi pour des incompatibilits qui portent ou porteraient gravement prjudice ses concurrents. On comprend et ragit vite chez Micro- soft : C# et le run-time (sous le nom de CLI, pour Common Language Infrastructure) font lobjet dune normalisation Ecma et maintenant ISO (avec, aux cts de Microsoft, les socits HP et Intel comme principaux membres actifs). De plus, avec les services Web, laccent est mis sur linteroprabilit entre plates-formes. Enn, mais indpendamment de Microsoft, une implmentation tout fait remarquable de .NET existe sur Linux avec le projet mono (voir 32. LivreC-Net.book Page 5 Jeudi, 3. septembre 2009 10:58 10Introduction larchitecture .NET 5www.go-mono.com) qui permet dy excuter des EXE .NET, sans mme devoir recompiler leprogramme. Ce projet est maintenant sous la houlette de Novell (qui avait dj pris en charge ladistribution Suse de Linux). Avec une forte implication de Microsoft, Novell dirige le portage deSilverlight Linux (ce qui implique le portage du run-time Silverlight, qui est un run-time .NET,adapt aux applications Web).Les utilisateurs courent-ils un risque avec .NET ? Depuis 2002, Microsoft mise tout sur lui :plus aucun dveloppement ni aucune communication (articles, sminaires et grand-messescomme TechEd ou PDC, Professional Developers Conference) sans que .NET soit au cur dusujet. Microsoft, dont on connat le savoir-faire et les moyens, sest condamn au succs. Et lesuccs est incontestablement au rendez-vous.Larchitecture .NETLarchitecture .NET (nom choisi pour montrer limportance accorde au rseau, amen parti-ciper de plus en plus au fonctionnement des applications grce aux services Web), technologieappele ses balbutiements NGWS (Next Generation Web Services), consiste en une coucheWindows, ou plutt une collection de DLL librement distribuable et maintenant directementincorpore dans le noyau des nouvelles versions de Windows.Cette couche contient un nombre impressionnant (plusieurs milliers) de classes (tous leslangages de .NET doivent tre orients objet), ainsi que tout un environnement dexcution (unrun-time, ou couche logicielle si vous prfrez) pour les programmes sexcutant sous contrlede lenvironnement .NET. On appelle cela le mode gr ou manag (managed code). La notionde run-time na rien de nouveau : les programmeurs en Visual Basic la connaissent depuis long-temps. Les programmeurs Java connaissent aussi la notion de machine virtuelle. Nanmoins,mme si le run-time .NET est, dans les faits, une machine virtuelle, Microsoft a toujourssoigneusement vit demployer ce terme, sans doute trop li Java et Sun Un run-timefournit des services aux programmes qui sexcutent sous son contrle. Dans le cas de larchi-tecture .NET, ces services font partie de ce que lon appelle le CLR (Common Language Run-time) et assurent : le chargement (load) et lexcution contrle des programmes ; lisolation des programmes les uns par rapport aux autres ; les vrications de type lors des appels de fonctions (avec refus de transtypages hasardeux) ; la conversion de code intermdiaire en code natif lors de lexcution des programmes, oprationappele JIT (Just In Time Compiler) ; laccs aux mtadonnes (informations sur le code qui font partie du code mme) ; les vrications lors des accs la mmoire (pas daccs possible en dehors de la zone alloue auprogramme) ainsi quaux tableaux (pas daccs en dehors de ses bornes) ; la gestion de la mmoire, avec ramasse-miettes automatique ; la gestion des exceptions ; la scurit ; 33. LivreC-Net.book Page 6 Jeudi, 3. septembre 2009 10:58 10 C# et .NET versions 1 4 6 ladaptation automatique des programmes aux caractristiques nationales (langue, reprsentation des nombres et des symboles, etc.) ; la compatibilit avec les DLL et les modules COM actuels qui sexcutent en code natif non contrl par .NET. Les classes .NET peuvent tre utilises par tous les langages prenant en charge larchitec- ture .NET. Ces classes sont regroupes dans des espaces de noms (namespaces) qui se prsen- tent en quelque sorte comme des rpertoires de classes. Quelques espaces de noms et quelques classes (quelques-uns seulement, parmi des milliers) :Les classes de larchitecture .NET Espace de nomsDescriptionExemples de classes SystemAccs aux types de base. Int32, Int64, Int16 Accs la console.Byte, CharStringFloat, Double, DecimalConsoleType System.CollectionsCollections dobjets.ArrayList, Hashtable, Queue, Stack,SortedList System.IO Accs aux chiers. File, Directory,Stream, FileStream,BinaryReader, BinaryWriterTextReader, TextWriter System.Data.CommonAccs ADO.NET aux basesDbConnection, DbCommand, DataSet de donnes. System.NetAccs au rseau. SocketsTcpClient, TcpListenerUdpClient System.Reflection Accs aux mtadonnes. FieldInfo, MemberInfo, ParameterInfo System.Security Contrle de la scurit. Permissions, Policy Cryptography System.WinForms Composants orients Windows. Form, Button, ListBoxMainMenu, StatusBar, DataGrid System.Web.UI.WebControls Composants orients Windows. Button, ListBox, HyperLinkDataGrid Il y a compatibilit absolue entre tous les langages de larchitecture .NET : une classe .NET peut tre utilise de manire identique ( la syntaxe du langage prs) dans tout langage gnrant du code .NET ; une classe peut tre cre dans un premier langage, servir de classe de base pour une classe drive implmente dans un deuxime langage, et cette dernire classe enn instancie dans un troisime langage ; la manire de crer et dutiliser les objets est identique (videmment aux dtails de langage prs). 34. LivreC-Net.book Page 7 Jeudi, 3. septembre 2009 10:58 10Introduction larchitecture .NET7Les services de .NET crent les objets (tout est objet dans larchitecture .NET) et se chargent delibrer automatiquement de la mmoire les objets qui ne peuvent plus tre utiliss : technique duramasse-miettes (garbage collector). On retrouvait dj ce procd dans le langage Smalltalkcr par le Parc (Palo Alto Research Center) de Xerox, lorigine des interfaces graphiques, dela souris et de bien dautres choses, notamment dans le domaine de lorient objet. Java a dailleurslargement emprunt de nombreux concepts Smalltalk. Il ny a pas de honte reconnatre quelarchitecture .NET et le langage C# en particulier, reprennent le meilleur du C++, de Delphi, deJava, de Visual Basic, de Smalltalk ainsi que dautres qui prfrent trop souvent rester conns des cnacles, gnralement acadmiques.Les langages de larchitecture .NETTous les langages .NET doivent prsenter des caractristiques communes : mmes types de donnes (tailles et reprsentation), ce que lon appelle le CTS (Common TypeSystem) dnissant prcisment ces caractristiques ; mme utilisation des classes, mme manire de crer et de grer les objets ; mme code intermdiaire, appel MSIL, gnr (MSIL pour Microsoft Intermediate Language outout simplement IL dans les documents de standardisation).Les compilateurs crant des programmes pour .NET doivent gnrer un code intermdiaire,appel MSIL ou IL. Il sagit dun code intermdiaire entre le code source (par exemple du codeC# ou Visual Basic) et le code natif directement excutable par le microprocesseur (code certesintermdiaire mais nettement plus proche du code machine que du code source). Ce code inter-mdiaire est donc indpendant du code de bas niveau quest le langage machine, mais il estcapable de manipuler ces constructions de haut niveau que sont les objets. Il faudrait presqueparler propos dIL de code machine universel ou de code machine virtuel . Celaexplique pourquoi .NET a pu tre port sur dautres plates-formes comme Linux (voir le projetmono qui est disponible et librement tlchargeable).Au moment dexcuter un programme, ce code intermdiaire est pris en charge par .NET qui lefait excuter, fonction aprs fonction, par un JIT compiler. .NET procde par compilation et nonpar interprtation : il sagit bien dune compilation (de code IL en code natif) en cours dexcu-tion de programme. Au moment de commencer lexcution dune fonction, mais lors du premierappel seulement, .NET appelle le JIT. Le JIT, qui connat alors lenvironnement dexcution, etnotamment le type de microprocesseur, compile le code intermdiaire de la fonction en codenatif, en fonction du microprocesseur rellement utilis (ce qui permet une optimisation). Ducode natif est ds lors excut. Le processus recommence quand une autre fonction, non encorecompile (de code IL en code machine) est appele. Trs rapidement, on nexcute plus que ducode natif optimis pour le microprocesseur de lutilisateur.Les compilateurs fournis par Microsoft avec Visual Studio sont : Visual Basic qui a t profondment modi et qui est devenu entirement orient objet ; 35. LivreC-Net.book Page 8 Jeudi, 3. septembre 2009 10:58 10 C# et .NET versions 1 4 8 Visual C++ qui peut travailler dans deux modes : dans le premier mode, compatible avec les versions prcdentes, le code gnr est le code natifdu microprocesseur et les classes sont les classes MFC. Ce mode nest donc pas compatible.NET et nen utilise pas les possibilits, ni pour le dveloppement ni pour lexcution. Ce modeest l pour assurer la compatibilit avec lexistant ; le second mode (managed code) vise larchitecture NET et utilise les ressources du nouvelenvironnement de dveloppement. Dvelopper en C++ pour .NET reste nanmoins lourd,surtout quand on connat la facilit offerte par C#, le nouveau langage introduit par Microsoft ; C#, qui devient de facto le langage de rfrence et qui fait lobjet de cet ouvrage. Dautres langages (Python et Ruby, que lon qualie de dynamiques ) peuvent tre ofciel- lement utiliss pour dvelopper des applications Silverlight (applications Web qui sexcutent sur la machine client). Les langages .NET ne se limitent cependant pas ceux-l. Microsoft publie toute la documen- tation ncessaire pour permettre dautres fournisseurs de compilateurs de livrer des versions .NET de leur produit : Eiffel, Pascal, Perl, Cobol, Python, Oberon, Scheme et Smalltalk pour nen citer que quelques-uns. Tous ces langages adapts .NET (sauf exception, ils ont t adapts au niveau du code gnr, pas de la syntaxe) utilisent les mmes classes et les mmes outils de dveloppement et leur intgration dans Visual Studio est saisissante. Les dveloppeurs de ces langages nont pas crer les librairies et outils ncessaires (par exemple le debugger) pour une vritable utilisation professionnelle. Or, dvelopper ces librairies et outils prend gn- ralement beaucoup plus de temps et mobilise plus de ressources humaines que le dveloppe- ment du compilateur lui-mme, ce qui constitue un frein lapparition de ces nouveaux langages (hors des circuits acadmiques videmment). Avec larchitecture .NET, Microsoft joue incontestablement la carte de louverture aux langages, y compris ceux provenant de sources extrieures la socit puisque laccent est mis sur la varit des langages et les possibilits dinter-langage : le programmeur a le choix, tout moment, du langage quil connat le mieux ou du langage le plus appropri certaines parties de lapplication. On peut en effet trs bien envisager une partie de lapplication crite dans un langage et une autre partie dans un langage diffrent. La pierre lance dans le jardin de Sun, qui prne Java comme unique langage, nchappe personne. Tous ces langages doivent videmment suivre les rgles dictes pour tre compatibles .NET. Ces rgles forment le CLS (Common Language Specication). Signalons quand mme quen gnrant un code susceptible dtre utilis ou rutilis (chier EXE ou DLL, ce que lon appelle un assembly dans le jargon .NET), le compilateur doit gnrer pour cette pice de code (on parle dailleurs de composants auto-descriptibles, self describing components) : des informations sur le contenu