c# 6 et visual studio 2015 - m.editions-eni.fr · c# 6 et visual studio 2015 les fondamentaux du...

33
Editions ENI C# 6 et Visual Studio 2015 Les fondamentaux du langage Collection Ressources Informatiques Table des matières

Upload: vuongque

Post on 21-Aug-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Editions ENI

C# 6 et Visual Studio 2015 Les 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

Editions ENI

C# 6Développez des applications Windows

avec Visual Studio 2015

CollectionExpert IT

Table des matières

1Table des matières

Avant-propos

Chapitre 1Travailler avec Visual Studio 2015

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. L'interface de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.1 L'éditeur de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2 Le concepteur de vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3 Le débogueur intégré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.4 Le gestionnaire d'extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.5 NuGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.6 Fenêtres personnalisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3. La création de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.1 Définir le point d'entrée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2 La différence entre projets et solutions . . . . . . . . . . . . . . . . . . . . 303.3 Configurer le projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.4 La conversion de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.5 Les projets partagés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.6 Les outils de refactorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

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

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

2Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 2L'architecture .NET

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2. CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3. Les bibliothèques de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4. Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.1 Les types valeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2 Les types référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Chapitre 3Introduction au langage C#

1. La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.1 Les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.2 Les mots-clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.3 La ponctuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.4 Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

1.4.1 Les opérateurs de calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . 501.4.2 Les opérateurs d'assignation. . . . . . . . . . . . . . . . . . . . . . . . 501.4.3 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . 51

1.5 La déclaration de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521.6 Les instructions de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

1.6.1 Les instructions conditionnelles . . . . . . . . . . . . . . . . . . . . 531.6.2 Les instructions itératives . . . . . . . . . . . . . . . . . . . . . . . . . 571.6.3 Les instructions de saut . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

1.7 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

2. Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.1 Le mot-clé using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.2 Le mot-clé alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.3 Les classes statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3Table des matières

3. Les types de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.1 Les types numériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3.1.1 Les entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.1.2 Les décimaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

3.2 Les booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683.3 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.4 Les types nullable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.5 La conversion de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

3.5.1 La conversion implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.5.2 La conversion explicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

4. Les constantes et les énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.1 Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.2 Les énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5. Les tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

6. Les collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

7. Les directives preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Chapitre 4La création de types

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

2. Les niveaux d'accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3. Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

4. Les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.1 Les champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.2 Les propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.3 Les méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

4.3.1 La surcharge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914.3.2 Les paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.4 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.5 Les destructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.6 Les classes et membres statiques . . . . . . . . . . . . . . . . . . . . . . . . . 99

4Développez des applications Windows avec Visual Studio 2015

C# 6

4.7 Les classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.8 Le mot-clé this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.9 Les indexeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024.10 La surcharge d'opérateurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

4.10.1Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . 1044.10.2Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . 106

Chapitre 5L'héritage

1. L'héritage de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091.1 Implémenter l'héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091.2 Les membres virtuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111.3 Masquer les membres hérités. . . . . . . . . . . . . . . . . . . . . . . . . . . 1111.4 Le mot-clé base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121.5 Les classes et membres abstraits . . . . . . . . . . . . . . . . . . . . . . . . 1131.6 Les classes et les méthodes scellées . . . . . . . . . . . . . . . . . . . . . . 1141.7 Les constructeurs dérivés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151.8 Le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

2. Les interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.1 L'implémentation d'interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.2 Le polymorphisme d'interface . . . . . . . . . . . . . . . . . . . . . . . . . . 1212.3 L'héritage d'interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Chapitre 6Types génériques

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

2. La création de types génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

3. Les contraintes de type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

5Table des matières

4. Les interfaces génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294.1 La variance dans les interfaces génériques . . . . . . . . . . . . . . . . 130

4.1.1 La covariance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304.1.2 La contravariance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

4.2 La création d'interfaces génériques variantes . . . . . . . . . . . . . . 1324.3 L'héritage d'interfaces génériques variantes . . . . . . . . . . . . . . . 133

5. La création de méthodes génériques . . . . . . . . . . . . . . . . . . . . . . . . . 134

6. Valeur par défaut générique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

7. L'héritage de classe générique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Chapitre 7Délégués, évènements et expressions lambda

1. Les délégués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.1 Les paramètres de méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401.2 Les méthodes cibles multiples . . . . . . . . . . . . . . . . . . . . . . . . . . 1411.3 Les délégués génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421.4 La compatibilité des délégués. . . . . . . . . . . . . . . . . . . . . . . . . . . 142

2. Les évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

3. Les expressions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473.1 L'utilisation des expressions lambda . . . . . . . . . . . . . . . . . . . . . 1483.2 Les délégués génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493.3 La capture de variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

Chapitre 8Création de formulaires

1. Utiliser les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531.1 Ajouter des formulaires au projet . . . . . . . . . . . . . . . . . . . . . . . 1531.2 Modifier le formulaire de démarrage . . . . . . . . . . . . . . . . . . . . . 1561.3 Les propriétés des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . 1561.4 Les méthodes des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . 159

6Développez des applications Windows avec Visual Studio 2015

C# 6

1.5 Les évènements des formulaires . . . . . . . . . . . . . . . . . . . . . . . . 160

2. Utiliser les contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.1 Les types de contrôles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.2 Ajouter des contrôles aux formulaires . . . . . . . . . . . . . . . . . . . 1622.3 Les propriétés des contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642.4 Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.5 Les conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682.6 L'ergonomie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.7 Ajouter des contrôles à la boîte à outils . . . . . . . . . . . . . . . . . . 171

Chapitre 9Implémentation de gestionnaires d'évènements

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

2. La création de gestionnaires d'évènements . . . . . . . . . . . . . . . . . . . . 1742.1 La mécanique d'un évènement. . . . . . . . . . . . . . . . . . . . . . . . . . 1762.2 L'ajout dynamique d'un gestionnaire d'évènements . . . . . . . . 1762.3 La suppression dynamique d'un gestionnaire d'évènements177

3. Les gestionnaires d'évènements avancés . . . . . . . . . . . . . . . . . . . . . . 1783.1 Un gestionnaire pour plusieurs évènements. . . . . . . . . . . . . . . 1783.2 Plusieurs gestionnaires pour un évènement . . . . . . . . . . . . . . . 178

Chapitre 10Validation de la saisie

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

2. La validation au niveau des champs . . . . . . . . . . . . . . . . . . . . . . . . . 1812.1 Les propriétés de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1812.2 Les évènements de validation . . . . . . . . . . . . . . . . . . . . . . . . . . 182

2.2.1 KeyDown et KeyUp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822.2.2 KeyPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

7Table des matières

2.2.3 Validating et Validated . . . . . . . . . . . . . . . . . . . . . . . . . . 183

3. La validation au niveau du formulaire. . . . . . . . . . . . . . . . . . . . . . . . 185

4. Les méthodes de retour à l'utilisateur . . . . . . . . . . . . . . . . . . . . . . . . 1884.1 MessageBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1894.2 ErrorProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

Chapitre 11Création de contrôles utilisateurs

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

2. Les contrôles personnalisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

3. L'héritage de contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

4. Les contrôles utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

Chapitre 12Création d'applications Windows Modern UI

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

2. Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

3. Les outils de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

4. Le langage XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

5. Une première application WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2145.1 Les bases d’un projet WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2145.2 Les contrôles et évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . 2165.3 Les styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

8Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 13Débogage

1. Les types d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2211.1 Les erreurs de syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2211.2 Les erreurs d'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2221.3 Les erreurs de logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

2. Le débogueur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2242.1 Contrôler l'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2252.2 Les points d'arrêt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

2.2.1 Les conditions d'arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2282.2.2 Le nombre d'accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2292.2.3 Le filtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2302.2.4 Les actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

2.3 Les DataTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2312.4 Les PerfTips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2322.5 Les attributs Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

3. Les fenêtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2353.1 La fenêtre Sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2363.2 La fenêtre Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2363.3 La fenêtre Automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.4 La fenêtre Espion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.5 La fenêtre Exécution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2383.6 Les autres fenêtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Chapitre 14Gestion des exceptions

1. La classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

2. La création d'exceptions personnalisées . . . . . . . . . . . . . . . . . . . . . . 242

3. Le déclenchement des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

4. L'interception et la gestion des exceptions . . . . . . . . . . . . . . . . . . . . 246

9Table des matières

Chapitre 15Monitoring

1. Le traçage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.1 Les classes Debug et Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.2 La collection d'écouteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

1.2.1 La création d'écouteurs. . . . . . . . . . . . . . . . . . . . . . . . . . . 2571.2.2 La sauvegarde des traces. . . . . . . . . . . . . . . . . . . . . . . . . . 257

1.3 Les commutateurs de trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2591.3.1 Le fonctionnement des commutateurs de trace . . . . . . . 2591.3.2 La configuration des commutateurs de trace . . . . . . . . . 261

2. Les journaux d'évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2622.1 L'interaction avec les journaux d'évènements. . . . . . . . . . . . . . 2622.2 La gestion des journaux d'évènements . . . . . . . . . . . . . . . . . . . 2632.3 L'écriture d'évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

3. Les compteurs de performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2653.1 La création de compteurs de performance . . . . . . . . . . . . . . . . 266

3.1.1 Depuis Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2663.1.2 Depuis le code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

3.2 L'utilisation de compteurs de performance. . . . . . . . . . . . . . . . 2693.3 L'analyse de compteurs de performance . . . . . . . . . . . . . . . . . . 271

Chapitre 16Tests unitaires

1. Introduction aux tests unitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.1 La création du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.2 Les classes de tests unitaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

2. La mise en place d'une série de tests . . . . . . . . . . . . . . . . . . . . . . . . . 2762.1 La création de tests au projet . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.2 Les Smart Unit Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2772.3 Le déroulement des tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

10Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 17Création du modèle de données

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

2. La création d'un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

3. La création d'entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

4. La génération de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . 290

5. La création d'entités à partir du code (Code First) . . . . . . . . . . . . . . 296

Chapitre 18Présentation de Entity Framework

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

2. Le mappage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3042.1 La couche logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3042.2 La couche conceptuelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3062.3 La couche de mappage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

3. Travailler avec les entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.1 Les entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3113.2 La classe ObjectContext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3143.3 Les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

3.3.1 Le concept de table par type . . . . . . . . . . . . . . . . . . . . . . 3163.3.2 Le concept de table par hiérarchie . . . . . . . . . . . . . . . . . . 316

Chapitre 19Présentation de LINQ

1. Les requêtes LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3191.1 La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3191.2 Les méthodes d'extension. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

11Table des matières

2. Les opérateurs de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1 Filtrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

2.1.1 Where . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1.2 OfType<TResult> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1.3 SelectMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3232.1.4 Skip et Take . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

2.2 Ordonner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.2.1 OrderBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.2.2 ThenBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

2.3 Grouper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.3.1 GroupBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.3.2 Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

2.4 Agréger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3262.5 Convertir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

3. Les requêtes parallèles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3273.1 Partitionner une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3283.2 Annuler une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

Chapitre 20LINQ to Entities

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

2. Extraire les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3322.1 L'extraction simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3322.2 L'extraction conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

3. Ajouter, modifier et supprimer des données . . . . . . . . . . . . . . . . . . . 3343.1 Ajouter des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3343.2 Modifier des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3353.3 Supprimer des données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3353.4 L'envoi des modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

12Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 21LINQ to SQL

1. La création de classes LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . 337

2. L'objet DataContext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3402.1 La méthode ExecuteQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3412.2 Utiliser des transactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3412.3 Les autres membres de DataContext . . . . . . . . . . . . . . . . . . . . 342

3. Exécuter des requêtes avec LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.1 Les requêtes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.2 Les requêtes filtrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3443.3 Les requêtes de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

4. Les procédures stockées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3444.1 L'ajout de procédures stockées au modèle. . . . . . . . . . . . . . . . . 3454.2 L'exécution de procédures stockées . . . . . . . . . . . . . . . . . . . . . . 346

Chapitre 22LINQ to XML

1. Les objets XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3471.1 XDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3471.2 XElement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3481.3 XNamespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3491.4 XAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3501.5 XComment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

2. Exécuter des requêtes avec LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3512.1 Les requêtes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522.2 Les requêtes filtrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522.3 Les requêtes de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

13Table des matières

Chapitre 23Le système de fichiers

1. Les classes de gestion du système de fichiers . . . . . . . . . . . . . . . . . . 3551.1 DriveInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3551.2 Directory et DirectoryInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3571.3 File et FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3591.4 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

2. Travailler avec le système de fichiers . . . . . . . . . . . . . . . . . . . . . . . . 3652.1 Les objets Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3652.2 La classe FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3652.3 Lire un fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

2.3.1 Lire avec la classe File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3672.3.2 Lire avec la classe StreamReader . . . . . . . . . . . . . . . . . . . 368

2.4 Écrire dans un fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3702.4.1 Écrire avec la classe File . . . . . . . . . . . . . . . . . . . . . . . . . . 3702.4.2 Écrire avec la classe StreamWriter . . . . . . . . . . . . . . . . . . 371

Chapitre 24Sérialisation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

2. La sérialisation binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.1 Les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.2 Contrôler la sérialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

2.2.1 Le contrôle par attribut . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.2.2 Le contrôle par interface. . . . . . . . . . . . . . . . . . . . . . . . . . 378

3. La sérialisation XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3813.1 Les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823.2 Contrôler la sérialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3853.3 La sérialisation XML SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

14Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 25Expressions régulières

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

2. Une première expression régulière. . . . . . . . . . . . . . . . . . . . . . . . . . . 390

3. Les options de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

4. Les caractères d'échappement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

5. Les ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

6. Les groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

7. Les ancres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

8. Les quantifieurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

Chapitre 26Multi-threading

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

2. La classe Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3982.1 Créer un thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3982.2 Suspendre ou annuler un thread . . . . . . . . . . . . . . . . . . . . . . . . 3992.3 Échanger des données avec un thread . . . . . . . . . . . . . . . . . . . . 4002.4 Verrouiller un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4032.5 Priorité des threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

3. Fonctions asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4053.1 Task et Task<TResult> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4063.2 async et await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

4. Le composant BackgroundWorker . . . . . . . . . . . . . . . . . . . . . . . . . . 410

15Table des matières

Chapitre 27Globalisation et localisation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

2. La culture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

3. La globalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

4. La localisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

Chapitre 28Sécurité

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

2. Les éléments de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4222.1 L'interface IPermission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4222.2 La classe CodeAccessPermission . . . . . . . . . . . . . . . . . . . . . . . . 4222.3 L'interface IPrincipal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

3. Implémentation de la sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4243.1 La sécurité basée sur les rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

3.1.1 Sécurité impérative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4253.1.2 Sécurité déclarative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

3.2 La sécurité basée sur les droits d'accès . . . . . . . . . . . . . . . . . . . . 4273.2.1 Sécurité impérative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4273.2.2 Sécurité déclarative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

4. Introduction à la cryptographie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

Chapitre 29Pour aller plus loin

1. Le dessin avec GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4331.1 La classe Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434

1.1.1 Les coordonnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4341.1.2 Les formes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

16Développez des applications Windows avec Visual Studio 2015

C# 6

1.2 La structure Color et les classes Brush et Pen . . . . . . . . . . . . . . 4371.2.1 La structure Color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4371.2.2 La classe Brush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4381.2.3 La classe Pen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4381.2.4 Les paramètres système . . . . . . . . . . . . . . . . . . . . . . . . . . 439

1.3 Les exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4391.3.1 L'affichage de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4391.3.2 Redimensionner une image . . . . . . . . . . . . . . . . . . . . . . . 441

2. Le remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4422.1 Le principe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4422.2 L'implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

2.2.1 La couche commune. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4432.2.2 L'application serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4442.2.3 L'application cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

3. La reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4503.1 La classe System.Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4503.2 Charger un assemblage dynamiquement . . . . . . . . . . . . . . . . . 452

3.2.1 L'énumération des types . . . . . . . . . . . . . . . . . . . . . . . . . 4523.2.2 L'instanciation d'objets. . . . . . . . . . . . . . . . . . . . . . . . . . . 4533.2.3 L'utilisation des membres. . . . . . . . . . . . . . . . . . . . . . . . . 454

Chapitre 30Assemblages et configurations

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

2. Les assemblages privés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

3. Les assemblages partagés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

4. Les fichiers de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

17Table des matières

Chapitre 31Déploiement

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

2. Les projets de déploiement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4662.1 XCOPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4662.2 Projet CAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4672.3 Projet de module de fusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4682.4 Projet d'installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

3. L'assistant Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

4. Configuration du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4734.1 Les propriétés du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4734.2 Les éditeurs de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . 476

4.2.1 Éditeur du système de fichiers . . . . . . . . . . . . . . . . . . . . . 4774.2.2 Éditeur du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4784.2.3 Éditeur des types de fichiers. . . . . . . . . . . . . . . . . . . . . . . 4794.2.4 Éditeur de l'interface utilisateur. . . . . . . . . . . . . . . . . . . . 4814.2.5 Éditeur des actions personnalisées. . . . . . . . . . . . . . . . . . 4834.2.6 Éditeur des conditions de lancement. . . . . . . . . . . . . . . . 484

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487