878
Gérard Leblanc C# et .NET Version2

2006 eyrolles - c# et .net

Embed Size (px)

DESCRIPTION

 

Citation preview

  • 1. C# et .NET Version 2 Grard Leblanc
  • 2.
  • 3. CHEZ LE MME DITEUR Dans la mme collection O. DAHAN. Delphi 2006. paratre. N11768, 2006, 600 pages. G. BRIARD. Oracle 10g sous Windows. paratre. N11469, 2006, 716 pages. O. DAHAN. Delphi 8 pour .NET. N11309, 2004, 738 pages. L. MAESANO, C. BERNARD et X. LE GALLES. Services Web avec J2EE et .NET. N11067, 2003, 1056 pages. D. LANTIM. .NET. N11200, 2003, 530 pages. C. DELANNOY. Programmer en C++. N11502, 2004, 590 pages. M. RIZCALLAH. Annuaires LDAP, 2e dition. N11504, 2004, 576 pages.
  • 4.
  • 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 le prsent ouvrage, sur quelque support que ce soit, sans autorisation de lditeur ou du Centre Franais dExploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris. Groupe Eyrolles, 2006, ISBN : 2-212-11778-7
  • 6. Table 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 . . . . . . . . . . . . . . . . . . . . Pour rsumer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 11 C# et .NET en version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 CHAPITRE 1 C# : types et instructions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.1 Nos premiers pas en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Notre premier programme en C# . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 Notre deuxime programme en C# . . . . . . . . . . . . . . . . . . . . . . . . 15 17 1.2 Commentaires en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.3 Identicateurs en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Les identicateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Les mots rservs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.4 Types de donnes en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 Les types entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2 Les types non signs ne sont pas conformes au CLS . . . . . . . . . . 1.4.3 Le type boolen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.4 Les types rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 15 20 21 22 24 24 25
  • 7. VI C# et .NET version 2 1.4.5 1.4.6 1.4.7 1.4.8 Les rels peuvent tre entachs dune inme erreur . . . . . . . . . . . Le type char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le qualicatif const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 27 27 28 1.5 Constantes en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 Constantes et directive #dene . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2 Constantes entires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.3 Sufxe pour format long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.4 Des erreurs de calcul qui sexpliquent . . . . . . . . . . . . . . . . . . 1.5.5 Constantes relles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.6 Le sufxe f pour les oat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.7 Le sufxe m pour le type decimal . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.8 Constantes de type caractre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.9 Constantes de type chanes de caractres . . . . . . . . . . . . . . . . 28 29 29 30 30 31 31 32 32 32 1.6 Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.7 Le type enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.1 Indicateurs binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1.8 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.1 Les tableaux une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.2 Dclaration et initialisation de tableau . . . . . . . . . . . . . . . . . . . . . 1.8.3 Accs aux cellules du tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.4 Libration de tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.5 Tableaux avec cellules de types diffrents . . . . . . . . . . . . . . . . . . 1.8.6 Copie de tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.7 Tableaux plusieurs dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8 Les tableaux dchiquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 1.9 Niveaux de priorit des oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . 49 1.10 Les instructions du C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.1 Bloc dinstructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.2 Toute variable doit tre initialise . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.3 Pas dinstructions spares par une virgule en C# . . . . . . . . . . . . 1.10.4 Conversions automatiques et castings . . . . . . . . . . . . . . . . . . . . . . 50 50 51 51 1.11 Oprations dentre/sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.1 Afchages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.2 De la couleur, mme pour la console . . . . . . . . . . . . . . . . . . . . . . 1.11.3 Et des sons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.4 Lecture de donnes saisies au clavier . . . . . . . . . . . . . . . . . . . . . . 41 42 43 44 45 46 46 47 48 50 52 52 53 54 54
  • 8. Table des matires 1.12 Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 1.12.7 1.12.8 VII 56 Les oprateurs arithmtiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pr- et post-incrmentations et dcrmentations . . . . . . . . . . . . . Type des rsultats intermdiaires . . . . . . . . . . . . . . . . . . . . . . . . . Oprateurs +=, -=, etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dpassements de capacit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oprations sur les boolens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oprations au niveau binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dcalages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 56 57 58 58 60 61 61 1.13 Conditions en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Linstruction if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variable boolenne dans condition . . . . . . . . . . . . . . . . . . . . . . . . Condition illgale en C, C++ et C# . . . . . . . . . . . . . . . . . . . . . . . Incrmentation dans condition . . . . . . . . . . . . . . . . . . . . . . . . . . . if imbriqus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linstruction ? : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les oprateurs logiques && et || . . . . . . . . . . . . . . . . . . . . . . . . . . Une rgle de logique parfois utile . . . . . . . . . . . . . . . . . . . . . . . . . 62 64 64 64 64 65 65 66 1.14 Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 1.13.1 1.13.2 1.13.3 1.13.4 1.13.5 1.13.6 1.13.7 1.13.8 1.14.1 1.14.2 1.14.3 1.14.4 1.14.5 1.14.6 1.14.7 Formes while et do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Forme for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les variables dclares dans des boucles . . . . . . . . . . . . . . . . . . . foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les instructions break et continue . . . . . . . . . . . . . . . . . . . . . . . . Linstruction switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linstruction goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 67 68 69 69 70 72 1.15 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 1.15.1 1.15.2 1.15.3 1.15.4 1.15.5 Les arguments dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . Passage dargument par rfrence . . . . . . . . . . . . . . . . . . . . . . . . Passage dun tableau en argument . . . . . . . . . . . . . . . . . . . . . . . . Passage darguments out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arguments variables en nombre et en type . . . . . . . . . . . . . . . . . . 73 75 76 77 78 1.16 Les pointeurs en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 1.16.1 La rservation de mmoire par stackalloc . . . . . . . . . . . . . . . . . . 87
  • 9. VIII C# et .NET version 2 CHAPITRE 2 C# : les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Notions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 La classe comme type dinformation . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Les objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.3 Libration dobjet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.4 Accs aux champs dun objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.5 Valeur initiale des champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.6 Champs const et readonly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.7 Les mthodes dune classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.8 Un exemple dutilisation de classe . . . . . . . . . . . . . . . . . . . . . . . . 2.1.9 Accs aux champs et mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.10 Champs et mthodes de mme nom dans des classes diffrentes . . 2.1.11 Les surcharges de mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.12 Le mot rserv this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.13 Forme complte de dclaration de classe . . . . . . . . . . . . . . . . . . . 89 89 89 90 92 92 93 93 93 94 95 96 96 97 98 2.2 Construction et destruction dobjet . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Constructeur statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3 Les destructeurs en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 100 100 2.3 Les tableaux dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 2.4 Champs, mthodes et classes statiques . . . . . . . . . . . . . . . . . . . . . . 102 2.5 Lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Notion dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.3 Pas dhritage multiple en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.4 Exemple dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.5 Rednition de mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.6 Les fonctions virtuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.7 .NET libre les objets pour vous . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.8 Appel de mthodes caches par la rednition . . . . . . . . . . . . 2.5.9 Quel est le vritable objet instanci dans une rfrence ? . . . . . . . 2.5.10 Copie dobjet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.11 Comparaison dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.12 Le qualicatif sealed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 2.6 Surcharge doprateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Oprateurs de conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 104 105 105 106 108 110 113 113 114 115 117 118 118 120
  • 10. Table des matires IX 2.7 Protections sur champs et mthodes . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 Lespace de noms global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 2.8 Classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 2.9 Les interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.1 Classe implmentant une interface . . . . . . . . . . . . . . . . . . . . . . . . 2.9.2 Rfrence une interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.3 Classe implmentant plusieurs interfaces . . . . . . . . . . . . . . . . . . . 2.9.4 Comment dterminer quune classe implmente une interface ? . 123 2.10 Les proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 2.11 Les indexeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 2.12 Object comme classe de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 2.13 La classe Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 2.14 Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 2.15 Les classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 2.16 Les gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16.1 Principes gnraux des gnriques . . . . . . . . . . . . . . . . . . . . . . . . 2.16.2 Implmentation dune pile sans recours aux gnriques . . . . . . . 2.16.3 Implmentation dune pile avec les gnriques . . . . . . . . . . . . . . 2.16.4 Contraintes appliques aux classes gnriques . . . . . . . . . . . . . . . 2.16.5 Les fonctions gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16.6 Simplier lcriture des programmes . . . . . . . . . . . . . . . . . . . . . . 137 137 137 139 141 142 142 2.17 Le type Nullable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 122 124 125 125 126 CHAPITRE 3 Classes non visuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 3.1 Bibliothque de fonctions mathmatiques . . . . . . . . . . . . . . . . . . 3.1.1 La classe Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 La classe Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 3.2 La classe de traitement de chanes . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Mise en format de chanes de caractres . . . . . . . . . . . . . . . . . . . 3.2.2 Adaptation des rsultats diffrentes cultures . . . . . . . . . . . . . . . 3.2.3 Afcher toutes les cultures reconnues par Windows . . . . . . . . . . 3.2.4 Modier le nombre de dcimales par dfaut . . . . . . . . . . . . . . . . 3.2.5 La classe StringBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 147 150 157 161 162 162 162
  • 11. X C# et .NET version 2 3.3 Les expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 3.4 Classes de manipulation de dates et dheures . . . . . . . . . . . . . . . . 3.4.1 La structure DateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 La structure TimeSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.3 Mise en format de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.4 Mesure dintervalles de temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 3.5 Classes encapsulant les types lmentaires . . . . . . . . . . . . . . . . . . 3.5.1 Les oprations de boxing et dunboxing . . . . . . . . . . . . . . . . . . . . 3.5.2 La classe Int32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.3 Les autres classes dentiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.4 La classe Double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.5 Les autres classes de rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.6 La classe Char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 169 173 174 177 179 181 182 182 184 184 3.6 Classe de tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1 Tris et recherches dichotomiques . . . . . . . . . . . . . . . . . . . . . . . . . 185 3.7 Les structures Point, Rectangle et Size . . . . . . . . . . . . . . . . . . . . . 3.7.1 La structure Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.2 La structure Rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.3 La structure Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 188 190 191 193 CHAPITRE 4 Les classes conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 4.1 Les conteneurs dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Les tableaux dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 La classe Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 La classe Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.4 Les listes tries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.5 La classe Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.6 Les tableaux de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 4.2 Les conteneurs gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 4.3 Les itrateurs en C# version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 195 204 205 206 209 211 CHAPITRE 5 Traitement derreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Les exceptions gnres par le systme . . . . . . . . . . . . . . . . . . . . . 5.1.1 Conversions avec TryParse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 218 219
  • 12. Table des matires XI 5.2 Les clauses try et catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Lordre des catch est important . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 222 5.3 Le groupe nally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 5.4 Propagation des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 5.5 Gnrer une exception dans une mthode . . . . . . . . . . . . . . . . . . 227 CHAPITRE 6 Dlgus et traitement dvnements . . . . . . . . . . . . . . . . . . . . . . . 231 6.1 Les dlgus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 6.2 Les vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 6.3 Les mthodes anonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 CHAPITRE 7 Cration et dploiement de programmes . . . . . . . . . . . . . . . . . . . 239 7.1 Cration dun programme C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 Les outils disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.2 Cration dun programme laide de Visual Studio . . . . . . . . . . . 7.1.3 La fentre Explorateur de solutions . . . . . . . . . . . . . . . . . . . . . . . 7.1.4 Crer un nouveau projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.5 Des options quil est souhaitable de modier . . . . . . . . . . . . . . 7.1.6 Donner aux chiers des noms plus explicites . . . . . . . . . . . . . . . . 7.1.7 Reprendre sous VS.NET des programmes crs avec le bloc-notes 7.1.8 Cacher limplmentation de fonctions . . . . . . . . . . . . . . . . . . . . . 7.1.9 Laide contextuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.10 Documentation automatique de programme . . . . . . . . . . . . . . . . . 239 239 240 244 245 246 246 247 247 247 248 7.2 Les techniques de remaniement de code . . . . . . . . . . . . . . . . . . . . 7.2.1 La refactorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.2 Les extraits de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 253 254 7.3 Outils de mise au point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Les classes Debug et Trace pour la mise au point . . . . . . . . . . . . 7.3.2 Rediriger les messages de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . 257 257 258 7.4 Le compilateur C# intgr au run-time . . . . . . . . . . . . . . . . . . . . . 259 7.5 Anatomie dun excutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.1 Le cas des DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.2 Les assemblages partags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 261 263 7.6 267 Dploiement dapplication avec ClickOnce . . . . . . . . . . . . . . . . .
  • 13. XII C# et .NET version 2 CHAPITRE 8 Informations sur la conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 8.1 Fonctions de conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Informations sur lcran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.2 Informations sur lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 8.2 Informations sur lenvironnement de Windows . . . . . . . . . . . . . . 276 8.3 Accs la base de donnes de recensement (registry) . . . . . . . . . 278 8.4 Le chier de conguration de programme . . . . . . . . . . . . . . . . . . 282 276 276 CHAPITRE 9 Processus et threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1 Les processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1.1 Excuter un programme ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1.2 Obtenir des informations sur un processus . . . . . . . . . . . . . . . . . . 9.1.3 Autre manire de dmarrer un processus ls . . . . . . . . . . . . . . . . 9.1.4 Redirection des entres-sorties du programme ls . . . . . . . . . . . . 9.1.5 Envoyer des squences de caractres une application . . . . . . . . 9.1.6 Naccepter quune seule instance de programme . . . . . . . . . . . . . 9.2 Les threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.1 Principe des threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.2 Excution de threads dans des programmes Windows . . . . . . . . . 9.2.3 Les fonctions asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.4 Le composant BackgroundWorker . . . . . . . . . . . . . . . . . . . . . . . . 9.2.5 Les niveaux de priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 285 288 289 290 291 291 293 293 293 298 300 303 305 9.3 Les sections critiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 La classe Interlocked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.2 La classe Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.3 Les verrouillages par objet ReaderWriterLock . . . . . . . . . . . . . . . 309 310 310 9.4 312 Les mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 CHAPITRE 10 volution de la programmation Windows . . . . . . . . . . . . . . . . . . . . 10.1 Dveloppement en C avec le SDK de Windows . . . . . . . . . . . . . . 10.1.1 Logique de programmation inverse entre DOS et Windows . . . . 10.1.2 Pas aussi simple que pour le mode console . . . . . . . . . . . . . . . . . 315 315 316 316
  • 14. Table des matires 10.1.3 10.1.4 XIII Le point dentre dun programme Windows . . . . . . . . . . . . . . . . Lapplication minimale en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 317 10.2 La notion de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 La boucle de messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.2 La fonction de traitement de messages . . . . . . . . . . . . . . . . . . . . . 318 319 320 10.3 Crer les contrles Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.1 Les contextes de priphrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.2 La persistance des afchages et le message WM_PAINT . . . . . . 322 322 10.4 Les frameworks OWL et MFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 10.5 Interoprabilit COM/DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5.1 Appeler des fonctions de lAPI Windows . . . . . . . . . . . . . . . . . . . 10.5.2 Composants COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 321 325 330 CHAPITRE 11 Les fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 11.1 Crer une application Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.1 La fentre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.2 Modier les noms choisis par dfaut . . . . . . . . . . . . . . . . . . . . . . 11.1.3 Des options quil est souhaitable de modier . . . . . . . . . . . . . . . . 11.1.4 Le squelette de programme gnr par Visual Studio . . . . . . . . . . 11.1.5 Pourquoi une classe de fentre ? . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.6 Les principales proprits dune fentre . . . . . . . . . . . . . . . . . . . . 11.1.7 Fentre de dveloppement et fentre dexcution . . . . . . . . . . . . 11.1.8 La grille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 334 334 335 339 339 340 341 11.2 Les proprits de la fentre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 11.3 Proprits run-time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 11.4 Les vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 11.5 Les mthodes lies aux fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 331 CHAPITRE 12 Clavier, souris et messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1 Le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1 Les vnements lis au clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.2 Faire gnrer la fonction de traitement . . . . . . . . . . . . . . . . . . . . . 12.1.3 Le code des touches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.4 Lvnement KeyPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 353 353 354 356 357
  • 15. XIV C# et .NET version 2 12.2 La souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.1 Les vnements lis la souris . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 12.3 Traitement dvnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.1 Traitement de longue dure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.2 Traiter nimporte quel vnement . . . . . . . . . . . . . . . . . . . . . . . . . 361 361 362 12.4 Drag & drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 12.5 Lhorloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 359 CHAPITRE 13 Les tracs avec GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1 Les objets du GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.1 Comment spcier une couleur ? . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.2 Les polices de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.3 Les stylos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.4 Les pinceaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 371 371 377 379 381 13.2 Les mthodes de la classe Graphics . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1 Obtention dun objet Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.2 Afchage de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.3 Afchage de formes gomtriques . . . . . . . . . . . . . . . . . . . . . . . . 13.2.4 Afchage dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.5 Les images en ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.6 La classe BufferedGraphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.7 Traitement dimage en GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 13.3 Lvnement Paint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 389 390 391 392 394 397 398 CHAPITRE 14 Composants et hirarchie de classes . . . . . . . . . . . . . . . . . . . . . . . 409 14.1 Les composants de Visual Studio.NET . . . . . . . . . . . . . . . . . . . . . . 410 14.2 La hirarchie des classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.1 Tout part de la classe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.2 Control, premire classe de base pour les composants . . . . . . . . . 410 14.3 Oprations pratiques sur les composants . . . . . . . . . . . . . . . . . . . 14.3.1 Placement dun composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3.2 Modier une proprit de composant . . . . . . . . . . . . . . . . . . . . . . 14.3.3 Donner la mme proprit plusieurs composants . . . . . . . . . . . . 410 411 414 414 415 415
  • 16. Table des matires 14.3.4 14.3.5 14.3.6 14.3.7 14.3.8 14.3.9 XV Gnrer une fonction de traitement . . . . . . . . . . . . . . . . . . . . . . . Placement des composants les uns par rapport aux autres . . . . . . Le passage du focus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ancrage des composants par rapport la fentre mre . . . . . . . . Accoler un contrle un bord de fentre . . . . . . . . . . . . . . . . . . . Bulle daide sur composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 416 416 417 418 418 14.4 Adaptation automatique la langue de lutilisateur . . . . . . . . . . 419 CHAPITRE 15 Boutons et cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 15.1 Les boutons de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.1 Insrer un bouton dans la fentre . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.2 Boutons dans bote de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.3 Les proprits des boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.4 Les vnements lis aux boutons . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.5 Effets de survol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.6 Faire traiter plusieurs boutons par une mme mthode . . . . . . . . 423 15.2 Les cases cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.1 Types de cases cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.2 Proprits des cases cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.3 Les vnements lis aux cases cocher . . . . . . . . . . . . . . . . . . . . 429 429 430 430 15.3 Les cases doption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 15.4 Les groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 423 425 425 426 428 428 CHAPITRE 16 Les botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.1 Les botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.1.1 Cration dune bote de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.1.2 Les proprits des botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . 16.1.3 Insrer des articles dans la bote de liste . . . . . . . . . . . . . . . . . . . . 16.1.4 Proprits run-time des botes de liste . . . . . . . . . . . . . . . . . . . . . 16.1.5 Les vnements lis aux botes de liste . . . . . . . . . . . . . . . . . . . . 16.1.6 Comment insrer des articles par programme ? . . . . . . . . . . . . . . 16.1.7 Comment associer une valeur unique un article ? . . . . . . . . . . . 16.1.8 Comment spcier des tabulations ? . . . . . . . . . . . . . . . . . . . . . . . 16.1.9 Bote de liste avec images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 435 436 436 438 438 439 440 441 443 443
  • 17. XVI C# et .NET version 2 16.2 Bote de liste avec cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 16.3 Les botes combo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.1 Les types de botes combo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.2 Proprits des botes combo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 447 447 16.4 Les listes en arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.4.1 Les nuds des listes en arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.4.2 Les proprits propres aux listes en arbre . . . . . . . . . . . . . . . . . . . 16.4.3 Loutil de cration de listes en arbre . . . . . . . . . . . . . . . . . . . . . . . 16.4.4 Les vnements lis aux listes en arbre . . . . . . . . . . . . . . . . . . . . . 16.4.5 Comment ajouter des articles en cours dexcution ? . . . . . . . . . . 449 449 450 452 452 453 16.5 Les fentres de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.1 Comment spcier les colonnes ? . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.2 Comment remplir la fentre de liste ? . . . . . . . . . . . . . . . . . . . . . . 16.5.3 Personnalisation de ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 458 459 465 16.6 Le composant DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.1 Remplir la grille partir du contenu dun DataTable . . . . . . . . . . 16.6.2 Remplir la grille partir du contenu dun tableau ou dune collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.3 lments de prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.4 Modier des en-ttes de colonnes . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.5 Redimensionner colonnes et ranges . . . . . . . . . . . . . . . . . . . . . . 16.6.6 Modier lapparence des cellules . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.7 Le contenu des cellules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.8 Modier le style dune cellule . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.9 Dessiner une cellule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.10 Les diffrentes reprsentations de cellules . . . . . . . . . . . . . . . . . . 16.6.11 Colonne avec case cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.12 Colonne avec bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.13 Photo dans une colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 466 468 469 469 470 471 472 473 474 476 476 476 478 CHAPITRE 17 Zones dafchage et ddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 17.1 Caractristiques des zones dafchage . . . . . . . . . . . . . . . . . . . . . . 482 17.2 Zones dafchage en hyperlien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 17.3 Caractristiques des zones ddition . . . . . . . . . . . . . . . . . . . . . . . 17.3.1 Les proprits des zones ddition . . . . . . . . . . . . . . . . . . . . . . . . 17.3.2 Associer un raccourci clavier une zone ddition . . . . . . . . . . . . 486 486 490
  • 18. Table des matires 17.3.3 17.3.4 XVII Initialiser et lire le contenu dune zone ddition . . . . . . . . . . . . . Convertir une chane de caractres en un nombre . . . . . . . . . . . . 490 491 17.4 Les zones ddition avec masque de saisie . . . . . . . . . . . . . . . . . . . 491 17.5 Les contrles Up and down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 CHAPITRE 18 Barres de menu, dtat et de boutons . . . . . . . . . . . . . . . . . . . . . . . 497 18.1 Le menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.1 Construire un menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.2 Les classes de menu et darticles . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.3 Modication de menu par programme . . . . . . . . . . . . . . . . . . . . . 18.1.4 Les vnements lis au menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.5 Les menus contextuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 498 498 500 501 501 18.2 Les listes dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 18.3 La barre doutils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.1 Les diffrents types de boutons dans une barre doutils . . . . . . . . 18.3.2 Les autres types de composants dans une barre doutils . . . . . . . 504 505 505 18.4 La barre dtat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 CHAPITRE 19 Botes de dialogue et fentres spciales . . . . . . . . . . . . . . . . . . . . 511 19.1 La classe MessageBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 19.2 Les botes de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.1 Bote de dialogue non modale . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 515 19.3 Les pages de proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 19.4 Les fentres de prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 19.5 Le composant SplitContainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 19.6 Les fentres MDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 19.7 Fentre de nimporte quelle forme . . . . . . . . . . . . . . . . . . . . . . . . . 523 19.8 Le composant WebBrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 19.9 Les botes de slection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.9.1 Les botes de slection ou de sauvegarde de chier . . . . . . . . . . . 19.9.2 La bote de slection de dossier . . . . . . . . . . . . . . . . . . . . . . . . . . 19.9.3 La bote de slection de police de caractres . . . . . . . . . . . . . . . . 19.9.4 La bote de slection de couleur . . . . . . . . . . . . . . . . . . . . . . . . . . 525 525 528 529 530
  • 19. XVIII C# et .NET version 2 CHAPITRE 20 Les composants de dlement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.1 Les barres de dlement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.1.1 533 533 Application des barres de dlement . . . . . . . . . . . . . . . . . . . . . . 536 20.2 Les barres gradues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 20.3 Les barres de progression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 CHAPITRE 21 Les impressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 21.1 Lobjet PrintDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 21.2 Caractristiques dimpression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 21.3 Prvisualisation dimpression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 21.4 Problmes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 CHAPITRE 22 Programmation des mobiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 22.1 Diffrences par rapport aux ordinateurs de bureau . . . . . . . . . . 554 22.2 Les mulateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 22.3 Programmer une application pour mobiles . . . . . . . . . . . . . . . . . 556 CHAPITRE 23 Accs aux chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 23.1 La classe DriveInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 23.2 Les classes Directory et DirectoryInfo . . . . . . . . . . . . . . . . . . . . . . 564 23.2.1 23.2.2 La classe Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La classe DirectoryInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 566 23.3 Les classes File et FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 23.3.1 23.3.2 La classe File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La classe FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 570 23.4 La classe Stream et ses classes drives . . . . . . . . . . . . . . . . . . . . . 572 23.4.1 23.4.2 La classe abstraite Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La classe FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 574
  • 20. Table des matires 23.5 Les classes de lecture/criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.5.1 23.5.2 23.5.3 23.5.4 23.5.5 23.5.6 XIX 575 La classe StreamReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le problme de nos lettres accentues . . . . . . . . . . . . . . . . . . . . . La classe StreamWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La classe BinaryReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La classe BinaryWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La classe StringReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 577 578 579 583 584 23.6 Srialisation et dsrialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 23.7 Encodage des caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 23.7.1 Comment reconnatre le type de chier de texte ? . . . . . . . . . . . . 591 CHAPITRE 24 Accs aux bases de donnes avec ADO.NET . . . . . . . . . . . . . . . 24.1 Les objets de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.1.1 24.1.2 24.1.3 24.1.4 24.1.5 24.1.6 24.1.7 593 594 Les chanes de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cas dune base de donnes Access . . . . . . . . . . . . . . . . . . . . . . . . Cas dune base de donnes SQL Server avec driver Ole-Db . . . . Cas dune base de donnes SQL Server . . . . . . . . . . . . . . . . . . . . Les autres attributs de la chane de connexion . . . . . . . . . . . . . . . Chanes de connexion pour dautres SGBD . . . . . . . . . . . . . . . . . Les vnements lis la connexion . . . . . . . . . . . . . . . . . . . . . . . 598 598 599 599 600 600 600 24.2 Les fabriques de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 24.3 Les schmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 24.4 Les modes de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 24.4.1 24.4.2 Le mode connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le mode dconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 605 24.5 Le mode connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 24.5.1 24.5.2 24.5.3 24.5.4 24.5.5 24.5.6 24.5.7 Excuter une commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple de commande renvoyant une valeur . . . . . . . . . . . . . . . . Exemple dajout dans une table . . . . . . . . . . . . . . . . . . . . . . . . . . Accs aux donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parcourir le rsultat dun SELECT . . . . . . . . . . . . . . . . . . . . . . . . Format de dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plusieurs DataReader en action sur une mme connexion . . . . . . 606 608 608 609 611 612 612
  • 21. XX C# et .NET version 2 24.5.8 24.5.9 24.5.10 24.5.11 Les oprations asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modications, accs concurrents et transactions . . . . . . . . . . . . . Les accs concurrents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 614 616 618 24.6 Le mode dconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.1 Les objets dadaptation de donnes . . . . . . . . . . . . . . . . . . . . . . . . 24.6.2 Lobjet DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.3 Contenu et structure dune table . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.4 Informations sur les diffrentes colonnes de la table . . . . . . . . . . 24.6.5 Lobjet DataColumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.6 Lobjet DataRow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.7 Les contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.8 Mappage de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.9 Les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.10 Accs une feuille Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.6.11 Modications dans le dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619 24.7 Les procdures stockes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.7.1 Premier exemple de procdure stocke . . . . . . . . . . . . . . . . . . . . . 24.7.2 Deuxime exemple de procdure stocke . . . . . . . . . . . . . . . . . . . 24.7.3 Troisime exemple de procdure stocke . . . . . . . . . . . . . . . . . . . 620 622 624 625 625 626 628 629 630 632 633 639 640 640 641 CHAPITRE 25 Liaisons de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 25.1 Liaison avec bote de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 25.2 Liaison avec zone ddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645 25.3 Les composants lis aux bases de donnes . . . . . . . . . . . . . . . . . . . 646 CHAPITRE 26 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 26.1 Crer un chier XML laide de Visual Studio . . . . . . . . . . . . . . 654 26.2 Crer un schma laide de Visual Studio . . . . . . . . . . . . . . . . . . 654 26.3 Les classes XmlTextReader et XmlTextWriter . . . . . . . . . . . . . . . 656 26.4 La classe XmlDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660 26.5 XML et les dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 26.6 Les transformations XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
  • 22. Table des matires XXI CHAPITRE 27 Programmation rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 27.1 Les protocoles rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 27.2 Programmation socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27.2.1 Les oprations effectuer dans la pratique . . . . . . . . . . . . . . . . . . 27.2.2 Des amliorations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27.2.3 Les oprations asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 672 674 675 27.3 Les classes TcpClient et TcpListener . . . . . . . . . . . . . . . . . . . . . . . 676 CHAPITRE 28 Programmation ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 28.1 Introduction la programmation Web ct serveur . . . . . . . . . . 28.1.1 Page HTML statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.2 Interactivit dans une page Web . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.3 Page ASP avec bouton, zone ddition et zone dafchage . . . . . 28.1.4 Le contenu du chier aspx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.5 Analyse dune balise asp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.6 vnement trait ct serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.7 Conversion en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.8 Le ViewState . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.9 Les vnements signals sur le serveur lors dun chargement de page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.10 La technique du code-behind . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.1.11 Utilisation des classes .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 681 683 684 686 687 688 689 690 28.2 Le code ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.2.1 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.2.2 Afcher des donnes sans utiliser de composant ASP.NET . . . . . 28.2.3 Faire excuter du code C# dans du HTML . . . . . . . . . . . . . . . . . . 28.2.4 Mise au point du code C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696 696 697 698 700 28.3 Utilisation de Visual Studio ou de Visual Web Developer . . . . . 28.3.1 Le choix de la norme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.3.2 Positionnement des composants dans la page . . . . . . . . . . . . . . . . 28.3.3 Les contrles HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.3.4 Les contrles simples de Web Forms . . . . . . . . . . . . . . . . . . . . . . 28.3.5 Changements apports par ASP.NET version 2 . . . . . . . . . . . . . . 28.3.6 Des exemples de composants simples dASP.NET . . . . . . . . . . . 28.3.7 Exemples relatifs aux autres composants simples . . . . . . . . . . . . 702 704 705 705 706 716 716 718 692 694 696
  • 23. XXII C# et .NET version 2 28.3.8 28.3.9 Le composant AdRotator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les autres composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721 722 28.4 Les contrles de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.4.1 Validation ct serveur avec une fonction crite en C# . . . . . . . . 28.4.2 Validation ct client avec une fonction crite en JavaScript . . . . 28.4.3 Les groupes de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 729 730 731 28.5 Attributs et feuilles de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731 28.6 Les pages matres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.6.1 Cration dune page matre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.6.2 Cration de pages de contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.6.3 Accder la page matre partir dune page de contenu . . . . . . . 736 28.7 Les composants de navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.7.1 Le composant BulletedList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.7.2 Le TreeView et le sitemap (plan de site) . . . . . . . . . . . . . . . . . . . . 28.7.3 Le composant Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.7.4 Le composant SiteMapPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.7.5 Le composant TreeView associ un chier XML . . . . . . . . . . . 742 737 740 742 742 744 747 748 748 28.8 Scurit dans ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.8.1 La base de donnes des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . 28.8.2 Reconnatre les utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.8.3 Les classes lies la scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 28.9 Techniques de personnalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.9.1 Le prol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.9.2 Les thmes et les chiers dapparence . . . . . . . . . . . . . . . . . . . . . 762 28.10 Accs aux bases de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.10.1 Les botes de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.10.2 La grille de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.10.3 Le composant Repeater . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.10.4 Le composant DataList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.10.5 Le composant DetailsView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 28.11 Les classes dASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.11.1 Les paramtres de la requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.11.2 Les cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.11.3 Reprsentations graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 28.12 Les contrles utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.12.1 Les objets Application et Session . . . . . . . . . . . . . . . . . . . . . . . . . 751 754 759 763 764 765 770 796 798 800 804 805 807 809 812
  • 24. Table des matires XXIII 28.13 Localisation des pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814 28.14 JavaScript dans les programmes ASP.NET . . . . . . . . . . . . . . . . . 28.14.1 Comment insrer des instructions JavaScript ? . . . . . . . . . . . . . 28.14.2 Effet de survol sur une image . . . . . . . . . . . . . . . . . . . . . . . . . . 28.14.3 Mettre en vidence la zone ddition qui a le focus . . . . . . . . . 28.14.4 Spcier dynamiquement, et partir du serveur, un traitement JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.14.5 vnement li au chargement de la page . . . . . . . . . . . . . . . . . 28.14.6 Traiter le clic sur un bouton, ct client . . . . . . . . . . . . . . . . . . 28.14.7 Traiter le clic sur un bouton, dabord ct client puis ct serveur 28.14.8 Afchage dune fentre pop-up . . . . . . . . . . . . . . . . . . . . . . . . . 28.14.9 Travail en frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.14.10 Redimensionnement et centrage de la fentre du navigateur . . 28.14.11 Dbogage de JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28.14.12 Insertion dynamique de scripts . . . . . . . . . . . . . . . . . . . . . . . . . 28.14.13 Passer une valeur au JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . 28.14.14 Passage dun tableau au JavaScript . . . . . . . . . . . . . . . . . . . . . . 28.14.15 Barre de progression dmarre partir du serveur . . . . . . . . . . 28.14.16 Le DOM, Document Object Model . . . . . . . . . . . . . . . . . . . . . . 28.14.17 Proprits et fonctions du DOM . . . . . . . . . . . . . . . . . . . . . . . . 816 817 819 820 821 821 822 823 823 824 825 826 827 829 830 831 832 833 CHAPITRE 29 Les services Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837 29.1 Introduction aux services Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837 29.2 Le protocole SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 29.3 Crer un service Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29.3.1 Cration manuelle du chier asmx . . . . . . . . . . . . . . . . . . . . . . . . 29.3.2 Cration de service Web laide de Visual Studio . . . . . . . . . . . . 840 840 844 29.4 Client de service Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845 INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849
  • 25. Introduction larchitecture .NET Le concepteur et responsable du projet Avant mme dexpliquer dans les grandes lignes ce que sont larchitecture .NET (les Amricains 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 pourtant Anders Hejlsberg est n au Danemark en 1961. En 1983, il rencontre le Franais Philippe Kahn, tabli en Californie, et lui prsente la premire version dun logiciel quil est en train dcrire. Il sagit dun logiciel de dveloppement de programmes, fond sur le langage Pascal, dune convivialit et dune puissance inconnues lpoque. Le rsultat de cette rencontre est une success story qui a marqu le monde des outils de dveloppement : celle de la socit Borland et de son produit phare, Turbo Pascal. Dans sa version Turbo Pascal, le langage Pascal est en effet considrablement dop par rapport sa version dorigine, dont le succs tait jusque-l limit aux milieux acadmiques. Avec ce produit, Anders Hejlsberg montrait dj son souci de fournir des outils rpondant aux besoins et attentes des dveloppeurs. Au dbut des annes 1990, Anders Hejlsberg et Borland ritrent le succs de Turbo Pascal avec Delphi, galement fond sur le langage Pascal, qui bouleverse cette fois la manire de dvelopper des programmes Windows. quelques annes de distance (le dbut de lre DOS pour Turbo Pascal et le dbut de lre Windows pour Delphi), Anders Hejlsberg devait donc concevoir sous la bannire Borland des produits qui ont suscit admiration et respect chez les dveloppeurs soucieux la fois de convivialit et defcacit. Jusqualors, ces derniers taient rsigns des outils peu puissants, peu performants ou alors totalement dpourvus de convivialit. Anders Hejlsberg prouvait que lon pouvait allier puissance, efcacit, lgance et convivialit. Ses ajouts au langage Pascal devaient tre massivement adopts par les dveloppeurs, au point den faire, dans la pratique, une norme de fait du langage.
  • 26. 2 C# et .NET version 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 depuis quelque temps (mais sans proposer quoi que ce soit rutiliser) la rutilisabilit et le dveloppement partir de briques logicielles. 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 priphrique. 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 0-2 Figure 0-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
  • 27. Introduction larchitecture .NET 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 Windows. Le but tait de permettre aux programmeurs en Visual J++ (la version Microsoft du compilateur Java) de dvelopper des applications professionnelles dignes de ce nom. En effet, lpoque, ntaient disponibles pour le dveloppement Windows en Java que les classes AWT (Abstract Window Toolkit) de Sun, des classes qui ne pouvaient satisfaire que des dveloppeurs vraiment peu exigeants (classes dailleurs aujourdhui largement dlaisses au prot de Swing). Les relations entre Anders Hejlsberg et la communaut ofcielle de Java devaient vite senvenimer, 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 les autres systmes, donc non conformes la philosophie Java. Dire que James Gosling, le concepteur de Java, napprcie gure Anders Hejlsberg relve de leuphmisme. Lors de la confrence Java One de San Francisco en 1998, Gosling commente dailleurs WFC en ces termes, gratignant au passage Anders Hejlsberg : something bizarre from Mr Method Pointers, pour ne reprendre que la moins assassine de ses phrases, largement reprises par la presse spcialise de lpoque. Toutes ces querelles et attaques personnelles prsentent dautant moins dintrt que Sun et Microsoft roulent 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, larchitecture .NET et le 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 toutefois attirer les projecteurs, quasiment dans lindiffrence. Ce que .NET change Pour la version 7 (2002) de loutil de dveloppement Visual Studio (version rebaptise Visual Studio .NET), Microsoft a conu un systme qui rend le dveloppement dapplications Windows et Web bien plus ais. Une nouvelle architecture a t mise au point, des langages ont t modis et un nouveau langage cr, le C# qui devient le langage de rfrence et principal langage pour Microsoft. Le C++ est certes encore prsent, mais rarissimes sont aujourdhui les fragments et exemples de code en C++ dans la documentation de Microsoft, les articles ou ouvrages consacrs .NET. Le fait que les applications Web doivent tre imprativement crites en C#, J# ou VB.NET est encore plus signicatif. Des efforts considrables ont galement 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 dmarque ainsi nettement de la version 6 de Visual Basic (plus aucun nouveau dveloppement pour ce produit et n du support annonce). .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 3
  • 28. 4 C# et .NET version 2 et dcrire des programmes : les programmeurs C++ habitus au dveloppement la dure avec MFC dcouvriront, surtout sils passent au C# (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#. 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 fournissant tel ou tel service. De plus, ces services Web sont (grce aux protocoles HTTP et SOAP (Simple Object Access Protocol), largement adopts) indpendants du langage et mme de la plate-forme. .NET implique-t-il des changements quant la manire dutiliser les applications ? La rponse est, la fois, oui et 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 simplicit et les mmes techniques, des applications pour appareils mobiles (appareils divers sous Windows CE, Pocket PC et smartphones), ainsi que des services Web. Cette mutation au prot des services Web implique une connexion performante et permanente au rseau Internet, ce qui nest pas encore le cas aujourdhui pour tous les utilisateurs. Mais nul doute que cela deviendra vite ralit, au mme titre que la connexion au rseau lectrique. Les serveurs Internet ne se contenteront plus de fournir des pages HTML statiques ou dynamiques : ils fourniront surtout des services Web aux applications. Ces serveurs Internet serviront 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 gravement prjudice ses concurrents. On comprend et ragit vite chez Microsoft : C# et le run-time (sous le nom de CLI, pour Common Language Infrastructure) font lobjet dune normalisation Ecma et maintenant ISO. De plus, avec les services Web, laccent est mis sur linteroprabilit entre plates-formes. Enn, mais indpendamment de Microsoft, une implmentation tout fait remarquable (avec nanmoins des incompatibilits en ce qui concerne les programmes Windows) de .NET existe sur Linux avec le projet mono (voir www.go-mono.com) qui permet dy excuter des EXE .NET, sans mme devoir recompiler le programme. Les utilisateurs courent-ils un risque avec .NET ? Microsoft mise tout sur lui : plus aucun dveloppement ni aucune communication (Web, articles, sminaires et grand-messes comme TechEd ou PDC (Professional Developers Conference) en dehors de .NET. Microsoft, dont on connat le savoir-faire et les moyens, est condamn au succs.
  • 29. Introduction larchitecture .NET Larchitecture .NET Larchitecture .NET (nom choisi pour montrer limportance accorde au rseau, amen participer de plus en plus au fonctionnement des applications grce aux services Web), technologie appele ses balbutiements NGWS (Next Generation Web Services), consiste en une couche Windows, en fait une collection de DLL librement distribuable et qui sera incorpore dans le noyau des prochaines versions de Windows (Windows Vista). Cette couche contient un nombre impressionnant (plus de deux mille) de classes (tous les langages de .NET doivent tre orients objet), ainsi que tout un environnement dexcution (un run-time, ou couche logicielle si vous prfrez) pour les programmes sexcutant sous contrle de lenvironnement .NET. On appelle cela le mode gr ou manag (managed code). La notion de run-time na rien de nouveau : les programmeurs en Visual Basic la connaissent depuis longtemps puisque mme les programmes VB compils en ont besoin. 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 toujours soigneusement vit demployer ce terme, sans doute trop li Java et Sun Un run-time fournit des services aux programmes qui sexcutent sous son contrle. Dans le cas de larchitecture .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, opration appele 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 au programme) 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 ; 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 larchitecture .NET. Ces classes sont regroupes dans des espaces de noms (namespaces) qui se 5
  • 30. 6 C# et .NET version 2 prsentent en quelque sorte comme des rpertoires de classes. Quelques espaces de noms et quelques classes : Les classes de larchitecture .NET Espace de noms Description Exemples de classes System Accs aux types de base. Accs la console. Int32, Int64, Int16 Byte, Char String Float, Double, Decimal Console Type System.Collections Collections dobjets. ArrayList, Hashtable, Queue, Stack, SortedList System.IO Accs aux chiers. File, Directory, Stream, FileStream, BinaryReader, BinaryWriter TextReader, TextWriter System.Data.Common Accs ADO.NET aux bases de donnes. DbConnection, DbCommand, DataSet System.Net Accs au rseau. Sockets TcpClient, TcpListener UdpClient System.Reflection Accs aux mtadonnes. FieldInfo, MemberInfo, ParameterInfo System.Security Contrle de la scurit. Permissions, Policy Cryptography System.WinForms Composants orients Windows. Form, Button, ListBox MainMenu, StatusBar, DataGrid System.Web.UI.WebControls Composants orients Windows. Button, ListBox, HyperLink DataGrid 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). Les services de .NET crent les objets (tout est objet dans larchitecture .NET) et se chargent de librer automatiquement de la mmoire les objets qui ne peuvent plus tre utiliss : technique du ramasse-miettes (garbage collection). On retrouvait dj ce procd dans le
  • 31. Introduction larchitecture .NET langage Smalltalk cr par le Parc (Palo Alto Research Center) de Xerox, lorigine des interfaces graphiques, de la souris et de bien dautres choses, notamment dans le domaine de lorient objet. Java a dailleurs largement emprunt de nombreux concepts Smalltalk. Il ny a pas de honte reconnatre que larchitecture .NET et le langage C# en particulier, reprennent le meilleur du C++, de Delphi, de Java, de Visual Basic et de Smalltalk. Cest ce dernier langage, pourtant le moins utilis des cinq, que doit aller prioritairement la reconnaissance des dveloppeurs. Les composants .NET utilisent la technique de la cl prive, connue du seul dveloppeur, et de la cl publique, disposition des utilisateurs. Il faut une concordance du code, de la cl publique et de la cl prive pour pouvoir excuter le code dun composant. Toute modication du code dun composant (opration effectue malicieusement par les virus) rend ce composant inutilisable. .NET utilise aussi une technique qui met n au problme connu sous le nom de lenfer des DLL (problme cr lors de linstallation dun logiciel, par crasement dune DLL existante) en attribuant des numros aux versions. Il est maintenant possible de garder plusieurs versions dune mme DLL, les programmes utilisant automatiquement la version de la DLL qui leur convient. Les langages de larchitecture .NET Tous les langages .NET doivent prsenter des caractristiques communes : mmes types de donnes (tailles et reprsentation), ce que lon appelle le CTS (Common Type System) dnissant prcisment ces caractristiques ; mme utilisation des classes, mme manire de crer et de grer les objets ; mme code intermdiaire : MSIL gnr (Microsoft Intermediate Language). Les compilateurs crant des programmes pour .NET doivent gnrer un code intermdiaire, appel MSIL. Il sagit dun code intermdiaire entre le code source (par exemple du code C# ou Visual Basic) et le code natif directement excutable par le microprocesseur. Ce code intermdiaire est donc indpendant du code de bas niveau quest le langage machine, mais il est capable de manipuler ces constructions de haut niveau que sont les objets. Cest ce qui explique pourquoi .NET a pu tre port sur dautres plates-formes comme Linux (voir le projet mono qui est disponible et librement tlchargeable). Au moment dexcuter un programme, ce code intermdiaire est pris en charge par .NET qui le fait excuter, fonction aprs fonction, par un JIT compiler. .NET procde par compilation et non par interprtation, toutefois il sagit dune compilation (de code MSIL en code natif) en cours dexcution de programme. Au moment de commencer lexcution dune fonction, mais lors du premier appel seulement, .NET appelle le JIT. Le JIT, qui connat alors lenvironnement dexcution, et notamment le type de microprocesseur, compile le code intermdiaire de la fonction en code natif, en fonction du microprocesseur rellement utilis (ce qui permet une optimisation). Du code natif est ds lors excut. Le processus recommence quand une autre fonction, non encore compile, 7
  • 32. 8 C# et .NET version 2 est appele. Trs rapidement, on nexcute plus que du code natif optimis pour le microprocesseur de lutilisateur. Il est aussi possible, avec lutilitaire ngen, de gnrer des programmes prcompils (et, par consquent, propres un microprocesseur bien particulier). Les compilateurs fournis par Microsoft avec Visual Studio sont : Visual Basic qui a t profondment modi et qui est devenu entirement orient objet ; Visual C++ qui peut travailler dans deux modes : dans le premier mode, compatible avec les versions prcdentes, le code gnr est le code natif du 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 mode est l pour assurer la compatibilit avec lexistant ; le second mode (managed code) vise larchitecture .NET et utilise les ressources du nouvel environnement 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 ; enn, J#, le langage Java de .NET dont on doute quil soit largement utilis voir le peu dactivit dans les forums consacrs ce langage. Les langages .NET ne se limitent cependant pas ceux-l. Microsoft publie toute la documentation 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 gnralement beaucoup plus de temps et mobilise plus de ressources humaines que le dveloppement 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, dautant moins que Microsoft a fait du C# un langage normalis par un comit indpendant de Microsoft (Ecma/ISO) alors que Java reste un langage propritaire de Sun.
  • 33. Introduction larchitecture .NET 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 de cette pice de code (classes, proprits et mthodes publiques) ainsi que sur les librairies utilises par le code de lassembly (nom des librairies ncessaires, numro de version minimale, etc.) ; le code des fonctions des classes (code MSIL). Tout cela donne .NET un contrle bien plus labor des programmes et notamment des librairies extrieures qui, un moment ou un autre, sont appeles par le programme. Un programme pour .NET dmarre comme un programme traditionnel mais le contrle passe immdiatement au run-time .NET qui fait excuter le programme sous sa haute surveillance (compilation du code MSIL, fonction aprs fonction, par le JIT, appels aux services .NET, vrications, etc.). Tout programme crit pour .NET a accs lAPI Windows (lensemble des fonctions de base de Windows) cependant, comme des classes .NET encapsulent ces fonctions, il est exceptionnel (mais possible) de faire appel ces fonctions de base de Windows. Les programmes .NET peuvent utiliser des composants COM. Sous Visual Studio, ces composants COM sutilisent aussi aisment que dans lenvironnement VB6. Enn, des composants .NET peuvent tre transforms en composants COM et utiliss comme tels dans VB6 mais aussi dans tous les outils de dveloppement qui reconnaissent la technologie COM. Le langage C# Le langage star de la nouvelle version de Visual Studio et de larchitecture .NET est C#, un langage driv du C++. Il reprend certaines caractristiques des langages apparus ces dernires annes et en particulier de Java (qui reprenait dj son compte des concepts introduits par Smalltalk quinze ans plus tt). C# peut tre utilis pour crer, avec une facilit incomparable, des applications Windows et Web. C# devient le langage de prdilection dASP.NET qui permet de crer des pages Web dynamiques avec programmation ct serveur. C# sinscrit parfaitement dans la ligne C C++ C# : le langage C++ a ajout les techniques de programmation oriente objet au langage C (mais la rutilisabilit promise par C++ ne la jamais t quau niveau source) ; le langage C# ajoute au C++ les techniques de construction de programmes sur base de composants prts lemploi avec proprits et vnements, rendant ainsi le 9
  • 34. 10 C# et .NET version 2 dveloppement de programmes nettement plus ais. La notion de briques logicielles aisment rutilisables devient ralit. Passons rapidement en revue les caractristiques de C# (par rapport au C++) : orientation objet prononce : tout doit tre incorpor dans des classes ; types prcisment conformes larchitecture .NET et vrications de type plus labores ; Unicode pour le code des caractres : les programmeurs C++ qui connaissent la lourdeur de linterfaage avec des modules Unicode (difcile aujourdhui dimaginer autre chose) apprcieront ; libration automatique des objets (garbage collection) ; les pointeurs ne disparaissent pas mais ne sont plus rservs qu des cas bien particuliers doptimisation (voir par exemple la n du chapitre 13 consacre au traitement dimages, lutilisation des pointeurs permet damliorer les performances de manire pour le moins spectaculaire) ; remplacement des pointeurs (sur tableaux, sur objets, etc.) par des rfrences qui offrent des possibilits semblables mais avec bien plus de sret mais sans perte de performance ; disparition du passage dargument par adresse au prot du passage par rfrence ; manipulation des tableaux de manire fort diffrente et avec plus de scurit, ce qui est particulirement heureux ; passage de tableaux en arguments ainsi que renvoi de tableau nettement simpli ; nouvelle manire dcrire des boucles avec linstruction foreach qui permet de balayer aisment tableaux et collections ; introduction des proprits, des indexeurs et des attributs ; disparition de lhritage multiple mais possibilit pour une classe dimplmenter plusieurs interfaces. Tout cela est tudi dans les premiers chapitres de louvrage. Crer des applications Windows et Web crire une application Windows ou Web en C# avec le nouvel environnement Visual Studio devient incomparablement plus simple quavec MFC puisque Visual Studio utilise le modle de composants ainsi que le dveloppement interactif quon