2006 eyrolles - c# et .net
Preview:
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