exemples en C# (nombreux exercices corrigés) [BTS - DUT ... · Editions ENI Algorithmique...

Preview:

Citation preview

Editions ENI

Algorithmique Techniques fondamentales de programmation

exemples en C# (nombreux exercices corrigés) [BTS - DUT informatique]

CollectionRessources Informatiques

Table des matières

1Table des matières

Introduction

Chapitre 1Introduction à l'algorithmique

1. Les fondements de l’informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.1 Architecture de Von Neumann . . . . . . . . . . . . . . . . . . . . . . . . . . 131.2 La machine de Turing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3 Représentation interne des instructions et des données . . . . . . 19

1.3.1 Le binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.3.2 Les octets et les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.3.3 L’hexadécimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2. L’algorithmique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.1 Programmer, c’est un art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.2 Définition : l’algorithme est une recette . . . . . . . . . . . . . . . . . . . 262.3 Pourquoi utiliser un algorithme ? . . . . . . . . . . . . . . . . . . . . . . . . 272.4 Le formalisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.4.1 Les algorigrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.4.2 L’algorithme sous forme de texte . . . . . . . . . . . . . . . . . . . 30

2.5 La complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.6 Les structures algorithmiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3. Les langages d’implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.1 Quel langage ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 Classifications des langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.2.1 Haut niveau, bas niveau. . . . . . . . . . . . . . . . . . . . . . . . . . . 393.2.2 Diverses classifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.2.3 Compilé ou interprété . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RICSHALG dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

2Techniques fondamentales de programmation (exemples en C#)

Algorithmique

3.3 La machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.4 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

3.4.1 Les avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.4.2 Un premier programme C#. . . . . . . . . . . . . . . . . . . . . . . . 45

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Chapitre 2Les variables et opérateurs

1. Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541.3 Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

1.3.1 Les nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551.3.2 Autres types numériques . . . . . . . . . . . . . . . . . . . . . . . . . . 581.3.3 Les caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591.3.4 Le type booléen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

1.4 Affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631.4.1 Affectation de valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631.4.2 Affectation de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

1.5 Saisie et affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681.6 Les constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

2. Opérateurs et calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.1 Les affectations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.2 Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.3 Les opérateurs booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762.4 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . 79

2.4.1 L’égalité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802.4.2 La différence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812.4.3 Inférieur, supérieur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

2.5 Le cas des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . 832.6 La précédence des opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3Table des matières

3. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.1 Les nombres négatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.2 La représentation des nombres réels . . . . . . . . . . . . . . . . . . . . . . 873.3 Les dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923.4 Les caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4. Types et langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954.1 Langages typés ou non . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954.2 La gestion de la mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Chapitre 3Tests et logique booléenne

1. Les tests et conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011.2 Que tester ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031.3 Tests SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

1.3.1 Forme simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051.3.2 Forme complexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

1.4 Tests imbriqués. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101.5 Choix multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141.6 Des exemples complets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

1.6.1 Le lendemain d’une date . . . . . . . . . . . . . . . . . . . . . . . . . 1171.6.2 La validité d’une date . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211.6.3 L’heure dans n secondes . . . . . . . . . . . . . . . . . . . . . . . . . . 123

2. L’algèbre booléen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272.1 L’origine des tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272.2 Petites erreurs, grosses conséquences . . . . . . . . . . . . . . . . . . . . 129

2.2.1 Ariane 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292.2.2 Mars Climate Orbiter. . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

2.3 George Boole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302.4 L’algèbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

4Techniques fondamentales de programmation (exemples en C#)

Algorithmique

2.4.1 Établir une communication . . . . . . . . . . . . . . . . . . . . . . . 1312.4.2 La vérité. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332.4.3 La loi ET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332.4.4 La loi OU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342.4.5 Le contraire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352.4.6 Les propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352.4.7 Quelques fonctions logiques . . . . . . . . . . . . . . . . . . . . . . 1392.4.8 Avec plus de deux variables . . . . . . . . . . . . . . . . . . . . . . . 142

2.5 Une dernière précision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

3. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Chapitre 4Les boucles

1. Les structures itératives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491.2 Quelques usages simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

2. Tant Que. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.1 Structure générale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.2 Boucles infinies et "break" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1532.3 Des exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

2.3.1 Une table de multiplication . . . . . . . . . . . . . . . . . . . . . . . 1552.3.2 Une factorielle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562.3.3 x à la puissance y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572.3.4 Toutes les tables de multiplication . . . . . . . . . . . . . . . . . 1592.3.5 Saisie de notes et calcul de moyennes . . . . . . . . . . . . . . . 1612.3.6 Rendez la monnaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672.3.7 Trois boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

3. Répéter … Jusqu’à . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723.1 Différences fondamentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723.2 Quelques exemples adaptés . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

3.2.1 La factorielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1743.2.2 Les trois boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

5Table des matières

4. Pour … Fin Pour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1764.1 Une structure pour compter… . . . . . . . . . . . . . . . . . . . . . . . . . 1764.2 … mais pas indispensable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774.3 Quelle structure choisir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774.4 Un piège à éviter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1784.5 Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

4.5.1 De nouveau trois boucles . . . . . . . . . . . . . . . . . . . . . . . . . 1794.5.2 La factorielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1804.5.3 Racine carrée avec précision. . . . . . . . . . . . . . . . . . . . . . . 1814.5.4 Calcul du nombre PI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Chapitre 5Les tableaux et structures

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1891.1 Principe et définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

1.1.1 Simplifier les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 1891.1.2 Les dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.1.3 Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1921.1.4 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1931.1.5 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1941.1.6 Les tableaux dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . 194

1.2 C# et les tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1961.2.1 Tableaux à une dimension . . . . . . . . . . . . . . . . . . . . . . . . 1961.2.2 Références de tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . 1971.2.3 Tableaux à n dimensions . . . . . . . . . . . . . . . . . . . . . . . . . 199

1.3 Représentation en mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2011.3.1 Représentation linéaire. . . . . . . . . . . . . . . . . . . . . . . . . . . 2011.3.2 Représentation par référence . . . . . . . . . . . . . . . . . . . . . . 203

6Techniques fondamentales de programmation (exemples en C#)

Algorithmique

2. Manipulations simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2052.1 Recherche d’un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2052.2 Le plus grand/petit, la moyenne . . . . . . . . . . . . . . . . . . . . . . . . 2082.3 Le morpion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

3. Algorithmes avancés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2143.1 Les algorithmes de tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

3.1.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2143.1.2 Le tri par création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2153.1.3 Le tri par sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2153.1.4 Le tri à bulles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2173.1.5 Le tri par insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2213.1.6 Le tri Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

3.2 Recherche par dichotomie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

4. Structures et enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2294.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2294.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

4.2.1 Type structuré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2304.2.2 Enregistrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

4.3 Utiliser les enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2324.3.1 Utiliser les champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2324.3.2 Un enregistrement dans une structure . . . . . . . . . . . . . . 2344.3.3 Un tableau dans une structure . . . . . . . . . . . . . . . . . . . . 235

4.4 Les tableaux d’enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . 2374.4.1 Les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2374.4.2 Une table comme champ . . . . . . . . . . . . . . . . . . . . . . . . . 238

4.5 Et C# ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

7Table des matières

Chapitre 6Les sous-programmes

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2431.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2431.2 Déclaration et définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

1.2.1 Dans un algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2451.2.2 En C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

1.3 Appel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2471.4 Fonctions et procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

1.4.1 Les procédures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2491.4.2 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

1.5 Variables locales et globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2521.5.1 Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2521.5.2 Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.5.3 Variables globales et C# . . . . . . . . . . . . . . . . . . . . . . . . . 255

1.6 Les paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2561.6.1 Les procédures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2561.6.2 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2591.6.3 Paramètres et C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2611.6.4 Petite application fonctionnelle. . . . . . . . . . . . . . . . . . . . 263

1.7 Sous-programmes prédéfinis . . . . . . . . . . . . . . . . . . . . . . . . . . . 2661.7.1 Un choix important . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2661.7.2 Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

1.8 Dernier cas : les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

2. Les sous-programmes récursifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2742.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2742.2 Un premier exemple : la factorielle . . . . . . . . . . . . . . . . . . . . . . 2752.3 Un exemple pratique : les tours de Hanoï. . . . . . . . . . . . . . . . . 277

3. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

8Techniques fondamentales de programmation (exemples en C#)

Algorithmique

Chapitre 7Les fichiers

1. Les différents fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2811.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2811.2 Problématique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2821.3 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2831.4 Les formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

1.4.1 Types de contenus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2831.4.2 Le fichier binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2851.4.3 Le fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2861.4.4 Quel format utiliser ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

1.5 Les accès aux fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2891.5.1 Séquentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2891.5.2 Accès direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2901.5.3 Indexé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2901.5.4 Autre ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

2. Les enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2912.1 Les délimiteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2912.2 Largeur fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2942.3 Principes d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

2.3.1 Étapes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2952.3.2 Identificateurs de fichiers et canaux . . . . . . . . . . . . . . . . 2962.3.3 Les modes d’ouverture . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

3. Fichier texte séquentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.1 Ouvrir et fermer un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.2 Lire et écrire des enregistrements . . . . . . . . . . . . . . . . . . . . . . . 300

3.2.1 Lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3003.2.2 Écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

3.3 Les enregistrements structurés . . . . . . . . . . . . . . . . . . . . . . . . . 3063.4 Exemple en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

9Table des matières

4. Les fichiers binaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3114.1 Nouvelles instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3114.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

Chapitre 8Notions avancées

1. Les pointeurs et références . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3151.1 Rappels sur la mémoire et les données . . . . . . . . . . . . . . . . . . . 315

1.1.1 Structure de la mémoire. . . . . . . . . . . . . . . . . . . . . . . . . . 3151.1.2 C# : des limites qui n’en sont pas . . . . . . . . . . . . . . . . . . 3171.1.3 Brefs exemples en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

1.2 Le pointeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3181.2.1 Principe et définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3181.2.2 Le C, roi des pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 3191.2.3 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

1.3 Notation algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3241.3.1 Déclarer et utiliser les pointeurs . . . . . . . . . . . . . . . . . . . 3241.3.2 Allocation dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

1.4 C#, les références et les pointeurs . . . . . . . . . . . . . . . . . . . . . . . 3281.4.1 Différences et points communs entre C et C# . . . . . . . 3281.4.2 Références sur les objets. . . . . . . . . . . . . . . . . . . . . . . . . . 3291.4.3 Les types primitifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3311.4.4 Références sur les structures . . . . . . . . . . . . . . . . . . . . . . 3321.4.5 Le piège en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3331.4.6 La valeur null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3341.4.7 Structures et passage de paramètre par valeur . . . . . . . . 335

2. Les listes chaînées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3372.1 Listes chaînées simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

2.1.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3372.1.2 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3402.1.3 Parcours de la liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

10Techniques fondamentales de programmation (exemples en C#)

Algorithmique

2.1.4 Recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3432.1.5 Ajout d’un élément. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3442.1.6 Suppression d’un élément . . . . . . . . . . . . . . . . . . . . . . . . 3482.1.7 Supprimer toute la liste . . . . . . . . . . . . . . . . . . . . . . . . . . 3512.1.8 Parcours récursif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

2.2 L’implémentation en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522.3 Autres exemples de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

2.3.1 Listes circulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3572.3.2 Listes d’éléments triés . . . . . . . . . . . . . . . . . . . . . . . . . . . 3572.3.3 Listes doublement chaînées . . . . . . . . . . . . . . . . . . . . . . . 3572.3.4 Files et piles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358

3. Les arbres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3593.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3593.2 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

3.2.1 Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3613.2.2 Terminologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3613.2.3 Description horizontale . . . . . . . . . . . . . . . . . . . . . . . . . . 3623.2.4 Description verticale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3623.2.5 L’arbre binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

3.3 Parcours d’un arbre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3633.4 Arbre binaire ordonné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

3.4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3663.4.2 Recherche d’un élément . . . . . . . . . . . . . . . . . . . . . . . . . . 3663.4.3 Ajout d’un élément. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3683.4.4 Suppression d’un noeud . . . . . . . . . . . . . . . . . . . . . . . . . . 369

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

11Table des matières

Chapitre 9Une approche de l'objet

1. Principe de l’objet, une notion évidente . . . . . . . . . . . . . . . . . . . . . . 3711.1 Avant de continuer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3711.2 Rappels sur la programmation procédurale . . . . . . . . . . . . . . . 372

1.2.1 Les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3721.2.2 Les traitements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

1.3 L’objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3731.3.1 Dans la vie courante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3731.3.2 En informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

1.4 Classe, objets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3781.5 Déclaration et accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3801.6 Les méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3821.7 Portée des membres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3841.8 Encapsulation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3851.9 L’héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

1.9.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3871.9.2 Commerce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3891.9.3 Hiérarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3901.9.4 Simple ou multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

1.10 Le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3921.10.1Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3921.10.2Le polymorphisme ad hoc . . . . . . . . . . . . . . . . . . . . . . . . 3921.10.3Le polymorphisme d’héritage . . . . . . . . . . . . . . . . . . . . . 3931.10.4Le polymorphisme paramétrique. . . . . . . . . . . . . . . . . . . 395

2. Manipuler les objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3962.1 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

2.1.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3962.1.2 Appel implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3972.1.3 L’héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399

2.2 Les destructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4012.3 Les membres statiques ou attributs. . . . . . . . . . . . . . . . . . . . . . 4022.4 Classes et méthodes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . 404

12Techniques fondamentales de programmation (exemples en C#)

Algorithmique

2.5 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

3. L’objet en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4093.1 Les langages objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4093.2 Déclaration des classes et objets . . . . . . . . . . . . . . . . . . . . . . . . 4103.3 Héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4133.4 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

AnnexeCorrigés des exercices

1. Introduction à l'algorithmique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

2. Les variables et opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

3. Tests et logique booléenne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

4. Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

5. Les tableaux et structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

6. Les sous-programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

7. Les fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

8. Notions avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480

9. Une approche de l'objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

Editions ENI

C# 6 et Visual Studio 2015Les fondamentaux du langage

CollectionRessources Informatiques

Table des matières

1Table des matières

Avant-propos

Chapitre 1La plateforme .NET

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2. Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3. Le Common Language Runtime (CLR). . . . . . . . . . . . . . . . . . . . . . . . 22

4. La Base Class Library (BCL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5. Le Dynamic Language Runtime (DLR) . . . . . . . . . . . . . . . . . . . . . . . . 25

6. Évolution de la plateforme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266.1 .NET Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276.2 .NET Compiler Platform : Roslyn . . . . . . . . . . . . . . . . . . . . . . . . 286.3 .NET dans le monde open source . . . . . . . . . . . . . . . . . . . . . . . . 28

7. Une première application avec Visual C# . . . . . . . . . . . . . . . . . . . . . 297.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297.2 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317.3 Analyse de l'assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

7.3.1 Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337.3.2 Exploration avec ILDASM . . . . . . . . . . . . . . . . . . . . . . . . . 34

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RI15CSHA dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

2Les fondamentaux du langage

C# 6 et Visual Studio 2015

Chapitre 2Visual Studio 2015

1. Installation et premier lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.2 Éditions de Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

1.2.1 Visual Studio Express . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.2.2 Visual Studio Community. . . . . . . . . . . . . . . . . . . . . . . . . 411.2.3 Éditions commerciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

1.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.4 Premier lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

2. Description des outils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532.1 Barres d'outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.2 Explorateur de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.3 Explorateur d'objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.4 Explorateur de serveurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.5 Fenêtre de propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.6 Fenêtre d'édition de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2.6.1 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.6.2 Suivi des modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.6.3 Mise en surbrillance des références . . . . . . . . . . . . . . . . . . 692.6.4 Refactorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.6.5 IntelliSense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722.6.6 Snippets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

Chapitre 3L'organisation d'une application

1. Les solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.2 Création d'une solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761.3 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

3Table des matières

1.4 Actions disponibles sur une solution. . . . . . . . . . . . . . . . . . . . . . 781.4.1 Ajout et suppression d'un projet . . . . . . . . . . . . . . . . . . . . 781.4.2 Création d'un dossier de solution . . . . . . . . . . . . . . . . . . . 801.4.3 Chargement et déchargement d'un projet . . . . . . . . . . . . 801.4.4 Création d'un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811.4.5 Génération de la solution . . . . . . . . . . . . . . . . . . . . . . . . . . 81

1.5 Configuration de la solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821.5.1 Configuration des projets de démarrage . . . . . . . . . . . . . . 821.5.2 Dépendances du projet. . . . . . . . . . . . . . . . . . . . . . . . . . . . 841.5.3 Paramètres d'analyse du code. . . . . . . . . . . . . . . . . . . . . . . 851.5.4 Fichiers sources pour le débogage . . . . . . . . . . . . . . . . . . . 861.5.5 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

2. Les projets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.1 Création d'un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.2 Propriétés d'un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

2.2.1 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972.2.2 Générer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002.2.3 Événements de build . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032.2.4 Déboguer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052.2.5 Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062.2.6 Paramètres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Chapitre 4Les bases du langage

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

2. Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.1 Nommage des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102.2 Type des variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

2.2.1 Types valeurs et types références . . . . . . . . . . . . . . . . . . 1112.2.2 Types intégrés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

2.3 Déclaration des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162.4 Portée des variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

4Les fondamentaux du langage

C# 6 et Visual Studio 2015

2.5 Modificateurs d'accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172.6 Le mot-clé var et l'inférence de type . . . . . . . . . . . . . . . . . . . . . 118

3. Les constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

4. Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194.1 Les opérateurs d’accès. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

4.1.1 Accès simple : . (point) . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.1.2 Accès indexé : [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.1.3 Accès avec nullité conditionnelle : ? . . . . . . . . . . . . . . . . 120

4.2 Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.3 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . 1214.4 Les opérateurs conditionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

4.4.1 Opérateur ternaire : ? ... : . . . . . . . . . . . . . . . . . . . . . . . . 1224.4.2 Opérateur de fusion de valeur nulle : ?? . . . . . . . . . . . . . 123

4.5 Les opérateurs logiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234.5.1 Négation : ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234.5.2 ET logique : &. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.3 OU logique : | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.4 OU exclusif : ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.5 ET conditionnel : &&. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254.5.6 OU conditionnel : || . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

4.6 Les opérateurs binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.6.1 ET binaire : & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.6.2 OU binaire : | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.6.3 OU exclusif : ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.6.4 Négation : ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.6.5 Décalage vers la droite : >> . . . . . . . . . . . . . . . . . . . . . . 1274.6.6 Décalage vers la gauche : << . . . . . . . . . . . . . . . . . . . . . 128

5. Les structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.1 Les structures conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . 128

5.1.1 if ... else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.1.2 switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

5.2 Les structures d'itération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

5Table des matières

5.2.1 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315.2.2 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325.2.3 do ... while. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.2.4 foreach. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.2.5 Contrôler l'exécution d'une boucle . . . . . . . . . . . . . . . . . 134

5.3 Autres structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.3.1 using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.3.2 goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

6. Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1366.1 Écriture d'une fonction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376.2 Paramètres de fonction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386.3 Procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436.4 Surcharges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

7. Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

Chapitre 5La programmation orientée objet avec C#

1. Les principes de la programmation orientée objet . . . . . . . . . . . . . . 147

2. Les classes et les structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

2.1.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.1.2 Constructeur et destructeur . . . . . . . . . . . . . . . . . . . . . . 1532.1.3 Classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

2.2 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582.3 Création de méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

2.3.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592.3.2 Méthodes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.3.3 Méthodes d'extension . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622.3.4 Méthodes opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

6Les fondamentaux du langage

C# 6 et Visual Studio 2015

2.4 Création de propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.4.1 Lecture et écriture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.4.2 Lecture seule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.4.3 Écriture seule. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672.4.4 Propriétés automatiques . . . . . . . . . . . . . . . . . . . . . . . . . 1672.4.5 Initialisation de propriétés automatiques . . . . . . . . . . . . 1682.4.6 Propriétés automatiques en lecture seule . . . . . . . . . . . . 1682.4.7 Propriétés indexées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

2.5 Membres statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702.6 Utilisation des classes et structures. . . . . . . . . . . . . . . . . . . . . . 171

2.6.1 Instanciation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712.6.2 Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.6.3 Types anonymes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

3. Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753.1 Nomenclature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763.2 using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

4. L'héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1784.1 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1794.2 Les mots-clés this et base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1804.3 Redéfinition et masquage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

4.3.1 Redéfinition de méthode . . . . . . . . . . . . . . . . . . . . . . . . . 1824.3.2 Masquage de méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834.3.3 Différences entre redéfinition et masquage . . . . . . . . . . 183

4.4 Imposer ou interdire l'héritage . . . . . . . . . . . . . . . . . . . . . . . . . 1864.5 Le transtypage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

5. Les interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1905.1 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1905.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

5.2.1 Implémentation implicite . . . . . . . . . . . . . . . . . . . . . . . . 1925.2.2 Implémentation explicite. . . . . . . . . . . . . . . . . . . . . . . . . 194

6. Les énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

7Table des matières

7. Les délégués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1967.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1977.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1977.3 Expressions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

8. Les événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1998.1 Déclaration et déclenchement . . . . . . . . . . . . . . . . . . . . . . . . . . 1998.2 Gestion des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

9. Les génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2039.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

9.1.1 Définition d'une classe générique . . . . . . . . . . . . . . . . . . 2049.1.2 Utilisation d'une classe générique . . . . . . . . . . . . . . . . . . 204

9.2 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2059.2.1 Définition d'une interface générique. . . . . . . . . . . . . . . . 2059.2.2 Utilisation d'une interface générique . . . . . . . . . . . . . . . 206

9.3 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2079.4 Méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

9.4.1 Définition d'une méthode générique. . . . . . . . . . . . . . . . 2109.4.2 Utilisation d'une méthode générique . . . . . . . . . . . . . . . 212

9.5 Événements et délégués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

10. Les collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21410.1 Types existants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

10.1.1Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21410.1.2ArrayList et List<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21510.1.3Hashtable et Dictionary<TKey, TValue>. . . . . . . . . . . 21910.1.4Stack et Stack<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22110.1.5Queue et Queue<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

10.2 Choisir un type de collection . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

11. La programmation dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

12. La programmation asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22612.1 Les objets Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22612.2 Écrire du code asynchrone avec async et await . . . . . . . . . . . . 229

8Les fondamentaux du langage

C# 6 et Visual Studio 2015

Chapitre 6Débogage et gestion des erreurs

1. Les différents types d'erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2311.1 Erreurs de compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2311.2 Erreurs d'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

2. Utilisation des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2342.1 Création et déclenchement d'exceptions . . . . . . . . . . . . . . . . . 234

2.1.1 La classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2342.1.2 Le mot-clé throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2352.1.3 Exceptions spécialisées . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

2.2 Gérer les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2362.2.1 La structure try ... catch . . . . . . . . . . . . . . . . . . . . . . . . . . 2362.2.2 Les filtres d’exception. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2392.2.3 Le bloc finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

3. Les outils fournis par Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . 2423.1 Contrôle de l'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

3.1.1 Démarrage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2433.1.2 Arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2443.1.3 Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2443.1.4 Reprise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

3.2 Points d'arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2453.3 Visualiser le contenu des variables . . . . . . . . . . . . . . . . . . . . . . 252

3.3.1 DataTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.3.2 Fenêtres Espion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2533.3.3 Fenêtre Espion express . . . . . . . . . . . . . . . . . . . . . . . . . . . 2543.3.4 Fenêtre Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . 255

3.4 Compilation conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

9Table des matières

Chapitre 7Développement d'applications Windows

1. Présentation de WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2591.1 Structure d'une application WPF. . . . . . . . . . . . . . . . . . . . . . . . 2601.2 XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

1.2.1 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2621.2.2 Espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

1.3 Contexte de données et binding . . . . . . . . . . . . . . . . . . . . . . . . 264

2. Utilisation des contrôles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2682.1 Ajout de contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2692.2 Positionnement et dimensionnement des contrôles . . . . . . . . 2722.3 Ajout d'un gestionnaire d'événements à un contrôle . . . . . . . . 275

3. Les principaux contrôles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2773.1 Contrôles de fenêtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

3.1.1 Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2783.1.2 NavigationWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

3.2 Contrôles de disposition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2823.2.1 Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2823.2.2 StackPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2863.2.3 DockPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2863.2.4 WrapPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2883.2.5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

3.3 Contrôles d'affichage de données . . . . . . . . . . . . . . . . . . . . . . . 2903.3.1 TextBlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2913.3.2 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2923.3.3 Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2933.3.4 ScrollViewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2943.3.5 ItemsControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2943.3.6 StatusBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2983.3.7 ToolTip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

10Les fondamentaux du langage

C# 6 et Visual Studio 2015

3.4 Contrôles d'édition de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.4.1 TextBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.4.2 RichTextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3003.4.3 PasswordBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

3.5 Contrôles de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.5.1 RadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.5.2 CheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3033.5.3 ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3033.5.4 ListBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.5.5 ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3063.5.6 TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3083.5.7 Slider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3133.5.8 Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3133.5.9 DatePicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

3.6 Contrôles d'action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3153.6.1 Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3153.6.2 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3153.6.3 ContextMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3183.6.4 ToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

4. Interactions clavier et souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3204.1 Événements clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3204.2 Événements souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3234.3 Glisser-déposer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

5. Aller plus loin avec WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3285.1 Introduction à l'utilisation de Blend . . . . . . . . . . . . . . . . . . . . . 328

5.1.1 L'interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3295.1.2 Ajout et modification de contrôles visuels . . . . . . . . . . . 337

5.2 Introduction à MVVM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3405.2.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3405.2.2 Les interfaces INotifyPropertyChanged

et INotifyCollectionChanged . . . . . . . . . . . . . . . . . . . . . 3415.2.3 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3425.2.4 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

11Table des matières

Chapitre 8Accès aux données

1. Principes d'une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3591.1 Terminologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3591.2 Le langage SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

1.2.1 Recherche d'enregistrements . . . . . . . . . . . . . . . . . . . . . . 3611.2.2 Ajout d'enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . 3631.2.3 Mise à jour d'informations. . . . . . . . . . . . . . . . . . . . . . . . 3631.2.4 Suppression d'informations . . . . . . . . . . . . . . . . . . . . . . . 364

2. ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3642.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3642.2 Les fournisseurs de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

2.2.1 SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3662.2.2 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3662.2.3 OLE DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3672.2.4 ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

3. Utiliser ADO.NET en mode connecté. . . . . . . . . . . . . . . . . . . . . . . . 3683.1 Connexion à une base de données. . . . . . . . . . . . . . . . . . . . . . . 368

3.1.1 Chaînes de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . 3683.1.2 Pools de connexions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3713.1.3 Gestion de la connexion. . . . . . . . . . . . . . . . . . . . . . . . . . 373

3.2 Création et exécution de commandes . . . . . . . . . . . . . . . . . . . . 3753.2.1 Définition et création d'une commande . . . . . . . . . . . . . 3753.2.2 Sélection de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3763.2.3 Actions sur les données . . . . . . . . . . . . . . . . . . . . . . . . . . 3773.2.4 Paramétrage d'une commande . . . . . . . . . . . . . . . . . . . . . 3783.2.5 Exécution de procédures stockées . . . . . . . . . . . . . . . . . . 381

4. Utiliser ADO.NET en mode déconnecté. . . . . . . . . . . . . . . . . . . . . . 3834.1 DataSet et DataTable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

4.1.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3834.1.2 Remplissage d'un DataSet

à partir d'une base de données . . . . . . . . . . . . . . . . . . . . . 384

12Les fondamentaux du langage

C# 6 et Visual Studio 2015

4.1.3 Remplissage d'un DataSet sans base de données . . . . . . 3874.2 Manipulation des données hors connexion . . . . . . . . . . . . . . . 390

4.2.1 Lecture des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3914.2.2 Création de contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . 3914.2.3 Relations entre DataTables . . . . . . . . . . . . . . . . . . . . . . . 3954.2.4 État et versions d'une DataRow . . . . . . . . . . . . . . . . . . . 3974.2.5 Modification de données . . . . . . . . . . . . . . . . . . . . . . . . . 3984.2.6 Suppression de données . . . . . . . . . . . . . . . . . . . . . . . . . . 4004.2.7 Valider ou annuler des modifications . . . . . . . . . . . . . . . 4004.2.8 Filtrage et tri à l'aide d'une DataView. . . . . . . . . . . . . . . 4014.2.9 Recherche de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

4.3 Valider les modifications au niveau de la base de données . . . 4064.3.1 Générer des commandes de mise à jour

automatiquement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4074.3.2 Commandes de mise à jour personnalisées. . . . . . . . . . . 4094.3.3 Gestion des accès concurrentiels . . . . . . . . . . . . . . . . . . . 410

5. Utiliser les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

Chapitre 9LINQ

1. Présentation de LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

2. Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4162.1 Une première requête LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 4192.2 Les opérateurs de requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

2.2.1 Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4222.2.2 Filtrage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4242.2.3 Triage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4262.2.4 Partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4272.2.5 Jointure et regroupement. . . . . . . . . . . . . . . . . . . . . . . . . 4282.2.6 Agrégation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

13Table des matières

3. LINQ to SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4333.1 Le mappage objet-relationnel. . . . . . . . . . . . . . . . . . . . . . . . . . . 433

3.1.1 Utilisation de SQLMetal . . . . . . . . . . . . . . . . . . . . . . . . . 4343.1.2 Utilisation du concepteur objet/relationnel . . . . . . . . . . 440

3.2 Utilisation de LINQ to SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4493.2.1 Récupération de données . . . . . . . . . . . . . . . . . . . . . . . . . 4493.2.2 Mise à jour de données. . . . . . . . . . . . . . . . . . . . . . . . . . . 4513.2.3 Gestion des conflits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

Chapitre 10XML

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

2. Structure d'un fichier XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4582.1 Constituants d'un document XML . . . . . . . . . . . . . . . . . . . . . . 4582.2 Document bien formé et document valide . . . . . . . . . . . . . . . . 462

3. Manipuler un document XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4633.1 Utilisation de DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4643.2 Utilisation de XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4693.3 Utilisation de LINQ to XML . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

Chapitre 11Déploiement

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

2. Windows Installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4782.1 Installation de InstallShield Limited Edition . . . . . . . . . . . . . . 4792.2 Création d'un projet d'installation . . . . . . . . . . . . . . . . . . . . . . 482

2.2.1 Informations sur l'application . . . . . . . . . . . . . . . . . . . . . 4832.2.2 Prérequis d'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . 4842.2.3 Fichiers de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . 4852.2.4 Raccourcis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4882.2.5 Valeurs de la base de registre . . . . . . . . . . . . . . . . . . . . . . 489

14Les fondamentaux du langage

C# 6 et Visual Studio 2015

2.2.6 Boîtes de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

3. ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4913.1 La technologie ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491

3.1.1 Principes de fonctionnement . . . . . . . . . . . . . . . . . . . . . . 4923.1.2 Méthodes de déploiement disponibles . . . . . . . . . . . . . . 4933.1.3 Les mises à jour d'applications avec ClickOnce . . . . . . . 494

3.2 La publication ClickOnce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

Chapitre 12Aide-mémoire

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525

Recommended