Download - C# 7 - Développez des applications Windows avec Visual Studio 2017 C# 7 · 2017-08-02 · C# 7 - Développez des applications Windows avec Visual Studio 2017 ... Ce livre sur le

Transcript
  • ISB

    N :

    978-

    2-40

    9-00

    928-

    0

    39

    C# 7 - Dveloppez des applications Windows avec Visual Studio 2017Jrme HUGON est dveloppeur/consul-tant .NET depuis de nombreuses annes et est certifi Microsoft sur les technolo-gies .NET. Son exprience du dveloppe-ment de sites web ASP.NET et SharePoint comme dapplications Windows ou Micro-soft Surface lui permet dapporter au lec-teur une connaissance de base solide du langage C# mais aussi une belle ouverture vers des concepts plus avancs pour une utilisation optimale de ce langage.

    Ce livre sur le dveloppement dapplications Windows avec le langage C# et Visual Studio 2015 est destin aux dveloppeurs qui dbutent avec le framework .NET. Il leur permet dapprendre les bases du langage C# et introduit des concepts plus avancs leur donnant une vue densemble des possibilits offertes par le langage C#, Visual Studio et le framework .NET en gnral. Lauteur a choisi une approche pas pas tout en construisant une application fonctionnelle tout au long de louvrage pour illustrer de manire pratique et cohrente les concepts abords.Lapprentissage commence par la familiarisation avec linterface de Visual Studio 2015 ainsi quavec le concept de larchitecture .NET. Les dtails du langage C#, sa syntaxe et ses fonctionnalits comme les classes, lhri-tage, les interfaces, les types gnriques ou encore les dlgus et les vnements sont ensuite expliqus avant daborder la conception dinter-faces utilisateur. La conception de linterface utilisateur couvre toutes les phases utiles pour crer des applications Windows la fois fonctionnelles et ergonomiques, allant de la cration de formulaires la cration de contrles en passant par limplmentation de gestionnaires dvnements et la validation des donnes saisies. Une introduction la conception dapplications WPF est galement incluse.Les outils de Visual Studio qui permettent de raliser les tests et le dbo-gage des applications sont dtaills en prsentant les techniques de gestion des erreurs mais aussi les concepts permettant de surveiller les applications comme le traage, linteraction avec les journaux dvnements et lutilisa-tion des compteurs de performance.Lutilisation de Entity Framework est dtaille au travers dexemples concrets permettant de comprendre rapidement comment crer des modles de don-nes et comment les utiliser pour communiquer avec une base de donnes tout en apprenant utiliser le langage de requte LINQ pour interagir avec des donnes sous diffrents formats (objets, SQL ou XML). Lalternative du stockage de donnes dune application sur le systme de fichiers et lutilisa-tion du concept de la srialisation sont galement dtaills fournissant ainsi une vision globale des possibilits offertes par le framework .NET concernant la gestion des donnes.Des concepts plus avancs sont galement prsents afin dexposer une gamme plus large des possibilits offertes par le langage C# et Visual Studio : lutilisation des expressions rgulires, le dveloppement dapplications multi-tches et asynchrones, la globalisation et la localisation dune appli-cation, la scurit du code, limplmentation dapplications client/serveur, le dessin avec GDI+ ainsi que la rflexion font partie des sujets introduits.La dernire partie de louvrage est consacre la cration dassemblages ainsi quau dploiement des applications. Les outils et techniques mis dis-position par Visual Studio pour crer des installeurs Windows et configurer les applications y sont dtaills.Le code de lapplication exemple traite dans louvrage est en tlchargement sur le site www.editions-eni.fr.

    Tlchargementwww.editions-eni.fr.fr

    Sur www.editions-eni.fr :b Le code de lapplication dveloppe dans le livre.

    Avant-propos Travailler avec VisualStudio2017Larchitecture.NETIntro-duction au langageC# La crationdetypes Lhritage Typesgnriques Dlgus, vnements et expressions lambda Cration de formulaires Im-plmentation de gestionnaires dvne-mentsValidationdelasaisieCrationdecontrlesutilisateursCrationdap-plications UWP Dbogage GestiondesexceptionsMonitoringTestsuni-tairesCrationdumodlededonnesPrsentationdeEntityFrameworkPr-sentation de LINQ LINQ to Entities LINQtoSQLLINQtoXMLLesystmede fichiers Srialisation Expressionsrgulires Multi-threading Globalisa-tionetlocalisationScuritPourallerplus loin Assemblages et configura-tionsDploiement

    Les chapitres du livre

    Pour plus dinformations :

    Jrme HUGON

    C# 7 Dveloppez des applications Windows avec Visual Studio 2017

    Dv

    elop

    pez

    des

    appl

    icat

    ions

    W

    indo

    ws

    avec

    Vis

    ual S

    tudi

    o 20

    17C#

    7

    bio + rsu-m

    en attente

  • 1Table des matires

    Avant-propos

    Chapitre 1Travailler avec Visual Studio 2017

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2. L'interface de dveloppement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.1 L'diteur de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2 Le concepteur de vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.3 Le dbogueur intgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.4 Le gestionnaire d'extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.5 NuGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.6 Fentres personnalises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    Les lments tlcharger sont disponibles l'adresse suivante :http://www.editions-eni.fr

    Saisissez la rfrence de l'ouvrage EI7C17VIS dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de tlchargement.

    3. La cration de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1 Dfinir le point d'entre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.2 La diffrence entre projets et solutions . . . . . . . . . . . . . . . . . . . . 313.3 Configurer le projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.4 La conversion de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.5 Les projets partags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.6 Les outils de refactorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    Chapitre 2L'architecture .NET

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    2. CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    3. Les bibliothques de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    lcroiseTampon

  • 2

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    4. Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.1 Les types valeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.2 Les types rfrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    Chapitre 3Introduction au langage C#

    1. La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.1 Les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.2 Les mots-cls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.3 La ponctuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511.4 Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    1.4.1 Les oprateurs de calcul. . . . . . . . . . . . . . . . . . . . . . . . . . . 521.4.2 Les oprateurs d'assignation . . . . . . . . . . . . . . . . . . . . . . . 521.4.3 Les oprateurs de comparaison . . . . . . . . . . . . . . . . . . . . . 53

    1.5 La dclaration de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541.6 Les instructions de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    1.6.1 Les instructions conditionnelles . . . . . . . . . . . . . . . . . . . . 55

    1.6.2 Les instructions itratives . . . . . . . . . . . . . . . . . . . . . . . . . 591.6.3 Les instructions de saut. . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    1.7 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    2. Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672.1 Le mot-cl using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.2 Le mot-cl alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.3 Les classes statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    3. Les types de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.1 Les types numriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    3.1.1 Les entiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.1.2 Les dcimaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    3.2 Les boolens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.3 Les chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.4 Les types nullable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.5 La conversion de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

  • 3Table des matires

    3.5.1 La conversion implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . 743.5.2 La conversion explicite . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    4. Les constantes et les numrations . . . . . . . . . . . . . . . . . . . . . . . . . . . 754.1 Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.2 Les numrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    5. Les tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    6. Les collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    7. Les directives preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    Chapitre 4La cration de types

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    2. Les niveaux d'accs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    3. Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    4. Les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884.1 Les champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    4.2 Les proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894.3 Les mthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    4.3.1 La surcharge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934.3.2 Les paramtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934.3.3 Les tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    4.4 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.5 Les destructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.6 Les classes et membres statiques . . . . . . . . . . . . . . . . . . . . . . . . 1024.7 Les classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034.8 Le mot-cl this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044.9 Les indexeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054.10 La surcharge d'oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    4.10.1 Les oprateurs arithmtiques . . . . . . . . . . . . . . . . . . . . . 1074.10.2 Les oprateurs de comparaison . . . . . . . . . . . . . . . . . . . . 109

  • 4

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    Chapitre 5L'hritage

    1. L'hritage de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131.1 Implmenter l'hritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131.2 Les membres virtuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151.3 Masquer les membres hrits. . . . . . . . . . . . . . . . . . . . . . . . . . . 1151.4 Le mot-cl base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161.5 Les classes et membres abstraits . . . . . . . . . . . . . . . . . . . . . . . . 1171.6 Les classes et les mthodes scelles . . . . . . . . . . . . . . . . . . . . . . 1181.7 Les constructeurs drivs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191.8 Le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

    2. Les interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232.1 L'implmentation d'interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 1232.2 Le polymorphisme d'interface . . . . . . . . . . . . . . . . . . . . . . . . . . 1252.3 L'hritage d'interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    Chapitre 6

    Types gnriques

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

    2. La cration de types gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    3. Les contraintes de type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    4. Les interfaces gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334.1 La variance dans les interfaces gnriques . . . . . . . . . . . . . . . . 134

    4.1.1 La covariance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344.1.2 La contravariance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

    4.2 La cration d'interfaces gnriques variantes . . . . . . . . . . . . . . 1364.3 L'hritage d'interfaces gnriques variantes . . . . . . . . . . . . . . . 137

    5. La cration de mthodes gnriques . . . . . . . . . . . . . . . . . . . . . . . . . 138

    6. Valeur par dfaut gnrique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    7. L'hritage de classe gnrique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

  • 5Table des matires

    Chapitre 7Dlgus, vnements et expressions lambda

    1. Les dlgus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431.1 Les paramtres de mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441.2 Les mthodes cibles multiples . . . . . . . . . . . . . . . . . . . . . . . . . . 1451.3 Les dlgus gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1461.4 La compatibilit des dlgus. . . . . . . . . . . . . . . . . . . . . . . . . . . 146

    2. Les vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

    3. Les expressions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513.1 L'utilisation des expressions lambda . . . . . . . . . . . . . . . . . . . . . 1523.2 Les dlgus gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533.3 La capture de variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533.4 Les fonctions locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    Chapitre 8Cration de formulaires

    1. Utiliser les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

    1.1 Ajouter des formulaires au projet . . . . . . . . . . . . . . . . . . . . . . . 1571.2 Modifier le formulaire de dmarrage . . . . . . . . . . . . . . . . . . . . . 1601.3 Les proprits des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . 1601.4 Les mthodes des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . 1631.5 Les vnements des formulaires . . . . . . . . . . . . . . . . . . . . . . . . 164

    2. Utiliser les contrles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.1 Les types de contrles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.2 Ajouter des contrles aux formulaires. . . . . . . . . . . . . . . . . . . . 1662.3 Les proprits des contrles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682.4 Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.5 Les conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.6 L'ergonomie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732.7 Ajouter des contrles la bote outils . . . . . . . . . . . . . . . . . . 175

  • 6

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    Chapitre 9Implmentation de gestionnaires d'vnements

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

    2. La cration de gestionnaires d'vnements . . . . . . . . . . . . . . . . . . . . 1782.1 La mcanique d'un vnement. . . . . . . . . . . . . . . . . . . . . . . . . . 1802.2 L'ajout dynamique d'un gestionnaire d'vnements . . . . . . . . 1802.3 La suppression dynamique d'un gestionnaire d'vnements . . 181

    3. Les gestionnaires d'vnements avancs . . . . . . . . . . . . . . . . . . . . . . 1823.1 Un gestionnaire pour plusieurs vnements. . . . . . . . . . . . . . . 1823.2 Plusieurs gestionnaires pour un vnement . . . . . . . . . . . . . . . 182

    Chapitre 10Validation de la saisie

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    2. La validation au niveau des champs . . . . . . . . . . . . . . . . . . . . . . . . . 1852.1 Les proprits de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1852.2 Les vnements de validation . . . . . . . . . . . . . . . . . . . . . . . . . . 186

    2.2.1 KeyDown et KeyUp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1862.2.2 KeyPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1872.2.3 Validating et Validated . . . . . . . . . . . . . . . . . . . . . . . . . . 187

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

    4. Les mthodes de retour l'utilisateur . . . . . . . . . . . . . . . . . . . . . . . . 1924.1 MessageBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1934.2 ErrorProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

    Chapitre 11Cration de contrles utilisateurs

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

    2. Les contrles personnaliss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    3. L'hritage de contrles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

  • 7Table des matires

    4. Les contrles utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

    Chapitre 12Cration d'applications UWP

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

    2. Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

    3. Les outils de dveloppement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    4. Le langage XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

    5. Une premire application UWP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2165.1 Les bases dun projet UWP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2165.2 Les contrles et vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . 2185.3 Les styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    Chapitre 13Dbogage

    1. Les types d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    1.1 Les erreurs de syntaxe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2231.2 Les erreurs d'excution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2241.3 Les erreurs de logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

    2. Le dbogueur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2262.1 Contrler l'excution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2282.2 Les points d'arrt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

    2.2.1 Les conditions d'arrt. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2302.2.2 Le nombre d'accs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2312.2.3 Le filtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2322.2.4 Les actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2322.2.5 Excuter jusqu'au clic . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

    2.3 Les DataTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2332.4 Les PerfTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2342.5 Les attributs Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

  • 8

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    3. Les fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.1 La fentre Sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2383.2 La fentre Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2383.3 La fentre Automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2393.4 La fentre Espion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2393.5 La fentre Excution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2393.6 Les autres fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

    Chapitre 14Gestion des exceptions

    1. La classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

    2. La cration d'exceptions personnalises . . . . . . . . . . . . . . . . . . . . . . 244

    3. Le dclenchement des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

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

    Chapitre 15

    Monitoring

    1. Le traage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2551.1 Les classes Debug et Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2551.2 La collection d'couteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

    1.2.1 La cration d'couteurs . . . . . . . . . . . . . . . . . . . . . . . . . . 2591.2.2 La sauvegarde des traces . . . . . . . . . . . . . . . . . . . . . . . . . 259

    1.3 Les commutateurs de trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2611.3.1 Le fonctionnement des commutateurs de trace . . . . . . 2611.3.2 La configuration des commutateurs de trace . . . . . . . . 263

    2. Les journaux d'vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2642.1 L'interaction avec les journaux d'vnements . . . . . . . . . . . . . 2642.2 La gestion des journaux d'vnements . . . . . . . . . . . . . . . . . . . 2652.3 L'criture d'vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

  • 9Table des matires

    3. Les compteurs de performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2673.1 La cration de compteurs de performance . . . . . . . . . . . . . . . . 268

    3.1.1 Depuis Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2683.1.2 Depuis le code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

    3.2 L'utilisation de compteurs de performance. . . . . . . . . . . . . . . . 2713.3 L'analyse de compteurs de performance . . . . . . . . . . . . . . . . . . 274

    Chapitre 16Tests unitaires

    1. Introduction aux tests unitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2771.1 La cration du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2771.2 Les classes de tests unitaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

    2. La mise en place d'une srie de tests . . . . . . . . . . . . . . . . . . . . . . . . . 2802.1 La cration de tests au projet . . . . . . . . . . . . . . . . . . . . . . . . . . . 2802.2 Le droulement des tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

    Chapitre 17

    Cration du modle de donnes

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

    2. La cration d'un modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

    3. La cration d'entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

    4. La gnration de la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . 293

    5. La cration d'entits partir du code (Code First) . . . . . . . . . . . . . . 298

    Chapitre 18Prsentation de Entity Framework

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

    2. Le mappage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3062.1 La couche logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3062.2 La couche conceptuelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

  • 10

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    2.3 La couche de mappage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

    3. Travailler avec les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3123.1 Les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3133.2 La classe DbContext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3153.3 Les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

    3.3.1 Le concept de table par type . . . . . . . . . . . . . . . . . . . . . . 3163.3.2 Le concept de table par hirarchie . . . . . . . . . . . . . . . . . 316

    Chapitre 19Prsentation de LINQ

    1. Les requtes LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3191.1 La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3191.2 Les mthodes d'extension. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

    2. Les oprateurs de requtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1 Filtrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

    2.1.1 Where . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1.2 OfType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

    2.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 Agrger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3262.5 Convertir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

    3. Les requtes parallles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3273.1 Partitionner une requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3283.2 Annuler une requte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

  • 1

    1Table des matires

    Chapitre 20LINQ to Entities

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

    2. Extraire les donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3322.1 L'extraction simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3322.2 L'extraction conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

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

    Chapitre 21LINQ to SQL

    1. La cration de classes LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . 337

    2. L'objet DataContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3402.1 La mthode ExecuteQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

    2.2 Utiliser des transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3412.3 Les autres membres de DataContext . . . . . . . . . . . . . . . . . . . . 342

    3. Excuter des requtes avec LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.1 Les requtes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.2 Les requtes filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3443.3 Les requtes de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

    4. Les procdures stockes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3444.1 L'ajout de procdures stockes au modle. . . . . . . . . . . . . . . . . 3454.2 L'excution de procdures stockes . . . . . . . . . . . . . . . . . . . . . . 346

  • 12

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    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. Excuter des requtes avec LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3512.1 Les requtes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3512.2 Les requtes filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522.3 Les requtes de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

    Chapitre 23Le systme de fichiers

    1. Les classes de gestion du systme de fichiers . . . . . . . . . . . . . . . . . . 3531.1 DriveInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

    1.2 Directory et DirectoryInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3551.3 File et FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3571.4 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

    2. Travailler avec le systme de fichiers . . . . . . . . . . . . . . . . . . . . . . . . 3632.1 Les objets Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3632.2 La classe FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3632.3 Lire un fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

    2.3.1 Lire avec la classe File . . . . . . . . . . . . . . . . . . . . . . . . . . . 3652.3.2 Lire avec la classe StreamReader. . . . . . . . . . . . . . . . . . . 366

    2.4 crire dans un fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3682.4.1 crire avec la classe File . . . . . . . . . . . . . . . . . . . . . . . . . . 3682.4.2 crire avec la classe StreamWriter . . . . . . . . . . . . . . . . . 369

  • 3

    1Table des matires

    Chapitre 24Srialisation

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

    2. La srialisation binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3722.1 Les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3722.2 Contrler la srialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

    2.2.1 Le contrle par attribut . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.2.2 Le contrle par interface . . . . . . . . . . . . . . . . . . . . . . . . . 376

    3. La srialisation XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3793.1 Les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3803.2 Contrler la srialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3833.3 La srialisation XML SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

    Chapitre 25Expressions rgulires

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

    2. Une premire expression rgulire. . . . . . . . . . . . . . . . . . . . . . . . . . . 388

    3. Les options de recherche. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

    4. Les caractres d'chappement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

    5. Les ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

    6. Les groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

    7. Les ancres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

    8. Les quantifieurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

    Chapitre 26Multi-threading

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

    2. La classe Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3962.1 Crer un thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3962.2 Suspendre ou annuler un thread . . . . . . . . . . . . . . . . . . . . . . . . 397

  • 14

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    2.3 changer des donnes avec un thread . . . . . . . . . . . . . . . . . . . . 3982.4 Verrouiller un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4012.5 Priorit des threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

    3. Fonctions asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4033.1 Task et Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4043.2 async et await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406

    4. Le composant BackgroundWorker . . . . . . . . . . . . . . . . . . . . . . . . . . 408

    Chapitre 27Globalisation et localisation

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

    2. La culture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

    3. La globalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

    4. La localisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

    Chapitre 28

    Scurit

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

    2. Les lments de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4202.1 L'interface IPermission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4202.2 La classe CodeAccessPermission . . . . . . . . . . . . . . . . . . . . . . . . 4202.3 L'interface IPrincipal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

    3. Implmentation de la scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4223.1 La scurit base sur les rles . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

    3.1.1 Scurit imprative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4233.1.2 Scurit dclarative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

    3.2 La scurit base sur les droits d'accs. . . . . . . . . . . . . . . . . . . . 4253.2.1 Scurit imprative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4253.2.2 Scurit dclarative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

    4. Introduction la cryptographie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

  • 5

    1Table des matires

    Chapitre 29Pour aller plus loin

    1. Le dessin avec GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.1 La classe Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

    1.1.1 Les coordonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4321.1.2 Les formes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

    1.2 La structure Color et les classes Brush et Pen . . . . . . . . . . . . . . 4351.2.1 La structure Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4351.2.2 La classe Brush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4361.2.3 La classe Pen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4361.2.4 Les paramtres systme. . . . . . . . . . . . . . . . . . . . . . . . . . 437

    1.3 Les exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4371.3.1 L'affichage de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4371.3.2 Redimensionner une image. . . . . . . . . . . . . . . . . . . . . . . 439

    2. Le remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4402.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4402.2 L'implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

    2.2.1 La couche commune . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

    2.2.2 L'application serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4422.2.3 L'application cliente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444

    3. Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4483.1 La classe System.Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4483.2 Charger un assemblage dynamiquement . . . . . . . . . . . . . . . . . 450

    3.2.1 L'numration des types . . . . . . . . . . . . . . . . . . . . . . . . . 4503.2.2 L'instanciation d'objets . . . . . . . . . . . . . . . . . . . . . . . . . . 4513.2.3 L'utilisation des membres . . . . . . . . . . . . . . . . . . . . . . . . 452

  • 16

    Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    Chapitre 30Assemblages et configurations

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

    2. Les assemblages privs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

    3. Les assemblages partags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

    4. Les fichiers de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

    Chapitre 31Dploiement

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

    2. Les projets de dploiement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4642.1 XCOPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4642.2 Projet CAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4652.3 Projet de module de fusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4662.4 Projet d'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

    3. L'assistant Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

    4. Configuration du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4714.1 Les proprits du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4714.2 Les diteurs de configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . 474

    4.2.1 diteur du systme de fichiers . . . . . . . . . . . . . . . . . . . . 4754.2.2 diteur du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4764.2.3 diteur des types de fichiers . . . . . . . . . . . . . . . . . . . . . . 4774.2.4 diteur de l'interface utilisateur . . . . . . . . . . . . . . . . . . . 4794.2.5 diteur des actions personnalises . . . . . . . . . . . . . . . . . 4814.2.6 diteur des conditions de lancement . . . . . . . . . . . . . . . 482

    Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

  • 97

    1

    Chapitre 11

    Cration de contrles utilisateurs

    Cration de contrles utilisateurs

    1. Introduction

    Le dveloppement d'applications est principalement bas sur les contrles ; ilsfournissent des fonctionnalits distinctes sous une forme visuelle permettant l'utilisateur d'interagir avec eux. Tous ces contrles drivent un niveau plusou moins lointain de la classe de base System.Windows.Forms.Control.

    Visual Studio propose l'intgration de contrles tiers par l'ajout la bote outils. Mais si le besoin est trs spcifique, il est possible de crer ses proprescontrles.

    La classe de base des contrles, Control, fournit les fonctionnalits de basequi sont ncessaires, notamment pour les entres utilisateurs via le clavier etla souris. Cela implique donc des proprits, des mthodes et des vnementscommuns tous les contrles. Nanmoins, cette classe de base ne fournit pasla logique d'affichage du contrle.

    Il existe trois modes de cration de contrle :

    Les contrles personnaliss.

    L'hritage de contrles.

    Les contrles utilisateurs.

    lcroiseTampon

  • 198Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    La cration de contrles s'inscrit dans le principe de rutilisation du code. Lalogique est cre en un seul endroit et peut tre utilise plusieurs fois. L'avan-tage est d'autant plus important pour la maintenance d'application car pourchanger le comportement de ce contrle, il n'y aura qu'un fichier modifier.

    2. Les contrles personnaliss

    Ces contrles offrent les plus grandes possibilits de personnalisation tant auniveau graphique que logique. Un contrle personnalis hrite directement dela classe Control. Il est donc ncessaire d'crire toute la logique d'affichagece qui, suivant le rsultat attendu, peut tre une phase trs longue et compli-que. Les mthodes, proprits et vnements doivent galement tre dfinispar le dveloppeur.

    La classe de base Control expose l'vnement Paint. C'est celui-ci qui estlev lorsque le contrle est gnr et cela implique l'excution du gestionnairede l'vnement par dfaut OnPaint. Cette mthode reoit un paramtreunique du type PaintEventArgs contenant les informations requises sur lasurface de dessin du contrle. Le type PaintEventArgs possde deuxproprits, Graphics du type System.Drawing.Graphics et

    E

    dit

    ions

    EN

    I -

    All r

    ights

    rese

    rved

    ClipRectangle du type System.Drawing.Rectangle. Pour ajouter lalogique de dessin au contrle, il faut surcharger la mthode OnPaint et yajouter le code de dessin :

    protected override void OnPaint (System.Windows.Forms.PaintEventArgs e){ // Code de dessin du contrle}

    La proprit Graphics de l'objet PaintEventArgs reprsente la surface ducontrle tandis que la proprit ClipRectangle reprsente la zone devanttre dessine. Lors de la premire reprsentation du contrle, la propritClipRectangle reprsente les limites du contrle. Ces limites peuventensuite tre modifies, par exemple si un contrle au-dessus en cache unepartie de telle sorte que le contrle ait besoin d'tre redessin. La partieClipRectangle reprsentera la rgion modifier.

  • 99

    1Cration de contrles utilisateursChapitre 11

    Crez un dossier Controls la racine du projet et ajoutez une nouvelle classenomme CustomControl dfinie de la manire suivante :

    using System.Drawing;

    namespace SelfMailer.Controls{ public class CustomControl : System.Windows.Forms.Control { protected override void OnPaint (System.Windows.Forms.PaintEventArgs e) { Rectangle R = new Rectangle(0, 0, this.Size.Width, this.Size.Height); e.Graphics.FillRectangle(Brushes.Green, R); } }}

    Dans le constructeur du formulaire MailServerSettings, ajoutez le coded'instanciation du contrle personnalis :

    Controls.CustomControl C = new Controls.CustomControl();C.Location = new System.Drawing.Point(0, 0);

    C.Size = this.Size;this.Controls.Add(C);

    Ce code instancie un nouveau contrle du type CustomControl, lui affectela position en haut gauche et dfinit sa taille celle du formulaire. Pour finir,le contrle est ajout la collection des contrles du formulaire.

    Lancez l'application ([F5]) et ouvrez le formulaire des paramtres de serveurmail pour voir que le contrle, qui reprsente un simple rectangle vert, remplitle formulaire comme une couleur de fond.

    Remarque

    Les possibilits de dessin avec GDI+ seront abordes plus loin dans cetouvrage, la section Le dessin avec GDI+ du chapitre Pour aller plus loin.

    Il suffit ensuite d'ajouter les membres requis pour la logique du contrle afinde le finaliser.

  • 200Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    3. L'hritage de contrles

    Si le but est d'tendre les fonctionnalits d'un contrle existant, que ce soit uncontrle du Framework .NET ou d'un diteur tiers, la manire la plus rapideest d'hriter de ce contrle. Le nouveau contrle possde ainsi tous lesmembres et la reprsentation visuelle de sa classe parente. Il n'y a plus qu'rajouter la logique de traitement. Au mme titre que les contrles personnali-ss, il reste possible de surcharger la mthode OnPaint pour modifier l'aspectvisuel du contrle.

    Si une application comporte plusieurs formulaires qui requirent un e-mailcomme champ de saisie, il serait prfrable de crer un contrle hritant de laclasse TextBox et d'y implmenter la logique de validation puis d'ajouter cecontrle aux formulaires de manire ne pas rpter le code de validation danschacun d'eux.

    La cration d'un contrle hrit se fait de la mme manire qu'un contrle per-sonnalis, en crant une classe qui va hriter du contrle ayant le comporte-ment de base souhait. Crez la classe EmailTextBox dans le dossierControls et faites-la hriter de la classe TextBox :

    public class EmailTextBox : System.Windows.Forms.TextBox

    E

    dit

    ions

    EN

    I -

    All r

    ights

    rese

    rved

    {}

    Ajoutez une surcharge de la mthode OnValidating pour effectuer les vri-fications sur le format et ajoutez le code de la mthodeFromEmail_Validating du formulaire MailServerSettings :

    protected override void OnValidating(System.ComponentModel.CancelEventArgs e){ base.OnValidating(e); string pattern = @"([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\." + @"[0-9]{1,3}\.[0-9]{1,3}\.)|" + @"(([a-zA-Z0-9\-]+\.)+))" + @"([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; Regex reg = new Regex(pattern); if (!reg.IsMatch(this.Text)) { this.BackColor = Color.Bisque; e.Cancel = true;

  • 01

    2Cration de contrles utilisateursChapitre 11

    } else this.BackColor = this.PreviousBackColor;}

    Des modifications sont apporter car on n'accde plus la proprit Text ducontrle partir du formulaire. Il faut donc remplacer :

    this.FromEmail.Text

    par un accs direct :

    this.Text

    La premire instruction :

    base.OnValidating(e);

    permet d'appeler la mthode de validation de la classe de base. Ainsi, il y a unepremire validation par la classe de base puis il y a validation du contrle parle code supplmentaire.

    La dernire chose notable est que le composant ErrorProvider n'est plus aumme niveau. Pour signaler l'utilisateur que le champ est invalide, au lieud'afficher une icne, la couleur de fond du contrle est modifie. La proprit

    PreviousBackColor, initialise avec la couleur de fond de base dans leconstructeur, permet de la conserver afin de la raffecter au contrle en cas desuccs de la validation :

    protected Color PreviousBackColor { get; set; }

    public EmailTextBox(){ this.PreviousBackColor = this.BackColor;}

    Le gestionnaire d'vnements FromEmail_Validating est devenu inutilepuisque la validation se fait au sein du contrle. De plus, vous pouvezsupprimer le contrle de type TextBox pour la saisie de l'e-mail del'expditeur et le remplacer par un contrle de type EmailTextBox qui a tajout par Visual Studio dans la bote outils sous le groupe ComposantsSelfMailer (o SelfMailer reprsente le nom du projet).

  • 202Dveloppez des applications Windows avec Visual Studio 2017

    C# 7

    Lancez l'application ([F5]) pour tester la fonctionnalit.

    4. Les contrles utilisateurs

    Le but d'un contrle utilisateur est de regrouper de manire logique descontrles afin d'obtenir une entit rutilisable. La cration se fait par l'ajout auprojet d'un Contrle utilisateur depuis la fentre d'ajout d'un nouvel lment.

    Ajoutez un contrle utilisateur nomm MailProperties dans le dossierControls du projet :

    E

    dit

    ions

    EN

    I -

    All r

    ights

    rese

    rved

    EI7C17VIS_T.pdfCopyright - Editions ENI - Aot 2017ISBN : 978-2-409-00928-0Avant-proposAvant-proposC# 7IntroductionIntroductionCet ouvrage est destin aux dveloppeurs dbutants ou plus expriments non familiariss avec les outils de dveloppement de Microsoft et qui souhaitent pouvoir utiliser de la meilleure manire possible les capacits offertes par le Framewor...Le langage C#, associ au Framework .NET, permet de dvelopper de nombreux types d'applications. Il peut s'agir d'applications Windows comme au fil de cet ouvrage, d'applications web, de services Windows, d'applications WPF, Silverlight ou Microsof...Visual Studio est l'outil, fourni par Microsoft, indispensable pour travailler le plus efficacement possible avec le Framework .NET et le langage C#. La premire partie de l'ouvrage vous aidera vous familiariser avec l'environnement de dveloppe...Au fil de l'ouvrage, vous serez amen construire une application complte et chacune des grandes tapes du cycle de dveloppement y sera aborde en commenant par la dfinition des classes mtier. Vous aborderez les dtails du langage C# ...La conception d'applications Windows repose en grande partie sur l'interface utilisateur. C'est grce elle que l'utilisateur interagit avec l'application et inversement. Les outils de Visual Studio sont dcrits au travers d'exemples concrets per...Il n'existe pas d'application sans bug, seulement des applications dont les bugs ne sont pas encore identifis. Ce n'est pas toujours l'application qui cre l'erreur, cela peut aussi tre le systme sur lequel elle sera dploye et qui n'existe...Les diffrentes formes d'enregistrement des donnes seront prsentes en mettant l'accent sur les bases de donnes et l'Entity Framework en tant que couche d'accs aux donnes. Vous apprendrez crer une base de donnes partir de la d...La globalisation et la localisation d'une application sont des concepts primordiaux qui sont dcrits au travers d'exemples concrets pour vous aider apprhender au mieux la cration d'une application internationale. Vous pourrez galement vous ...Comme pour la cration d'une application, cet ouvrage se clturera par l'apprentissage du dploiement d'applications. Vous apprendrez crer des assemblages et des programmes d'installation grce la description de toutes les tapes et de t...Les lments tlcharger sont disponibles l'adresse suivante : http://www.editions-eni.fr Saisissez la rfrence de l'ouvrage EI7C17VIS dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de tlcharge...Avant-proposTravailler avec Visual Studio 2017L'architecture .NETIntroduction au langage C#La cration de typesL'hritageTypes gnriquesDlgus, vnements et expressions lambdaCration de formulairesImplmentation de gestionnaires d'vnementsValidation de la saisieCration de contrles utilisateursCration d'applications UWPDbogageGestion des exceptionsMonitoringTests unitairesCration du modle de donnesPrsentation de Entity FrameworkPrsentation de LINQLINQ to EntitiesLINQ to SQLLINQ to XMLLe systme de fichiersSrialisationExpressions rguliresMulti-threadingGlobalisation et localisationScuritPour aller plus loinAssemblages et configurationsDploiement

    Travailler avec Visual Studio 2017Travailler avec Visual Studio 2017C# 71. Introduction1. IntroductionVisual Studio est l'interface de dveloppement de Microsoft. Elle est compose d'un ensemble d'outils permettant aux dveloppeurs de crer des applications pour les plates-formes .NET. Visual Studio 2017 est distribu en plusieurs ditions : Community : Microsoft fournit gratuitement cette dition de Visual Studio 2017 dans un but de formation pour les tudiants, les dveloppeurs open source et les dveloppeurs particuliers. Elle runit toutes les fonctionnalits de base pour la c Community : Microsoft fournit gratuitement cette dition de Visual Studio 2017 dans un but de formation pour les tudiants, les dveloppeurs open source et les dveloppeurs particuliers. Elle runit toutes les fonctionnalits de base pour la c Community : Microsoft fournit gratuitement cette dition de Visual Studio 2017 dans un but de formation pour les tudiants, les dveloppeurs open source et les dveloppeurs particuliers. Elle runit toutes les fonctionnalits de base pour la c Community

    Professional : dition destination des dveloppeurs professionnels seuls ou au sein de petites quipes. Les outils de dbogage et de tests unitaires font partie des fonctionnalits notables de cette dition. Professional : dition destination des dveloppeurs professionnels seuls ou au sein de petites quipes. Les outils de dbogage et de tests unitaires font partie des fonctionnalits notables de cette dition. Professional

    Enterprise : pour les quipes professionnelles travaillant sur des projets ncessitant plus d'interactions entre leurs membres. Les fonctionnalits notables sont les outils de tests, les outils collaboratifs (Team Foundation Server) et les outils Enterprise : pour les quipes professionnelles travaillant sur des projets ncessitant plus d'interactions entre leurs membres. Les fonctionnalits notables sont les outils de tests, les outils collaboratifs (Team Foundation Server) et les outils Enterprise

    Dans cet ouvrage, l'dition Community sera utilise pour la prsentation des exemples.L'dition Community de Visual Studio 2017 est disponible en tlchargement l'adresse : L'dition Community de Visual Studio 2017 est disponible en tlchargement l'adresse : http://www.visualstudio.com

    2. L'interface de dveloppement2. L'interface de dveloppementL'environnement de dveloppement a t optimis afin de diminuer le temps de chargement des solutions. Dans cette nouvelle version, Visual Studio surveille les performances des extensions et envoie des alertes pour avertir l'utilisateur de l'impa...AideGrer le niveau de performance de Visual Studio

    Vous aurez la possibilit de dsactiver les extensions qui ralentissent trop le chargement de Visual Studio. Au niveau des fentres d'outils, vous pourrez choisir de ne pas les afficher lors du dmarrage de l'application ou de les masquer afin de...Les applications produites peuvent spcifier quelle version cible du Framework .NET utiliser. En fonction des options d'installation choisies, Visual Studio 2017 propose les versions du Framework .NET allant de la version 4.5.2 la version 4.7. Si...

    Avant l'installation de Framework .NET antrieurs.

    Aprs l'installation de Framework .NET antrieurs.L'interface de Visual Studio comporte plusieurs outils indispensables au dveloppement d'applications.2.1 L'diteur de texte2.1 L'diteur de texteL'diteur de texte de Visual Studio est un puissant outil permettant de saisir le code de l'application. Les mots-cls et les types y sont colors pour faciliter la lecture et la comprhension du code. En mme temps que le code est saisi, l'di...L'IntelliSense est une fonctionnalit permettant d'afficher les classes et leurs membres en rapport avec le code saisi ainsi que les paramtres et les surcharges possibles pour les mthodes :

    Les icnes gauche des noms de membres permettent de dfinir visuellement si le membre est une mthode, une proprit, une variable, un vnement ou un autre type de membre. Lorsqu'un membre est en surbrillance, une info- bulle explicative a...Les ampoules apparaissent dans la marge de l'diteur et permettent d'accder toutes les actions rapides, la correction de problmes de code courants et la refactorisation du code. Lorsque Visual Studio considre que c'est ncessaire, une ampo....

    Visual Studio prend en charge les crans tactiles pour certains gestes : Dfilement en touchant et en se dplaant. Dfilement en touchant et en se dplaant. Dfilement en touchant et en se dplaant.

    Zoom en pinant. Zoom en pinant.

    Slection d'une ligne en touchant la marge. Slection d'une ligne en touchant la marge.

    Slection d'un mot en le touchant deux fois. Slection d'un mot en le touchant deux fois.

    Affichage du menu contextuel en restant au contact. Affichage du menu contextuel en restant au contact.

    La fonction de recherche globale (accessible via le raccourci [Ctrl] TEditionAtteindre

    Des lignes verticales de repre de la structure du code apparaissent dans l'diteur pour permettre de contextualiser les lignes dans les grands blocs de code. En plaant le curseur de la souris sur une de ces lignes, une info-bulle apparat. Elle...

    L'diteur de texte prend en charge EditorConfig (http://editorconfig.org/OutilsOptionsEditeur de texteC#Style de code

    2.2 Le concepteur de vues2.2 Le concepteur de vuesLe concepteur de vues permet de placer graphiquement les lments sur les formulaires en les faisant glisser depuis la bote outils :

    Visual Studio gnre automatiquement le code requis pour instancier les contrles et les positionner. Le concepteur de vues est en quelque sorte un outil qui interprte le code pour en donner une reprsentation visuelle.

    2.3 Le dbogueur intgr2.3 Le dbogueur intgrLe dbogueur intgr de Visual Studio permet de tester et suivre le droulement de l'application, de disposer des points d'arrt et de suivre pas pas l'excution du code, de surveiller et de modifier manuellement les variables en cours d'ex...

    Lorsque l'application est lance depuis Visual Studio avec la touche [F5] (Dmarrer le dbogage

    Le dbogueur et ses fonctionnalits seront dtaills dans le chapitre Dbogage.Le dbogueur et ses fonctionnalits seront dtaills dans le chapitre Dbogage.

    2.4 Le gestionnaire d'extensions2.4 Le gestionnaire d'extensionsLe gestionnaire d'extensions est apparu avec la version 2010 de Visual Studio. Il permet d'ajouter des fonctionnalits Visual Studio partir d'une galerie en ligne. Le gestionnaire d'extensions est accessible depuis le menu OutilsExtensions et mises jour

    L'onglet En ligneTlcharger

    L'onglet Install

    2.5 NuGet2.5 NuGetVisual Studio intgre NuGet en version 4.0. NuGet est bas sur le principe du gestionnaire d'extensions dont les modules vont agir au niveau du projet et non de Visual Studio. Le gestionnaire de modules NuGet est disponible depuis le menu ProjetGrer les packages NuGet

    Vous avez ainsi accs un grand nombre de modules tout aussi facilement installables que les extensions :

    L'avantage d'ajouter un composant votre projet en passant par le gestionnaire de modules NuGet est de pouvoir bnficier de la dernire version en ligne de ceux-ci. De plus, le gestionnaire gre les dpendances entre modules. Si le module que...La prsence d'un onglet Mises jour

    2.6 Fentres personnalises2.6 Fentres personnalisesIl est possible de crer une disposition personnelle pour les fentres de l'diteur et de l'enregistrer partir du menu Fentre - Enregistrer la disposition de fentreFentre - Appliquer la disposition de fentrenumro de la disposition

    3. La cration de solutions3. La cration de solutionsEn travaillant avec Visual Studio, il est rare de commencer partir d'une solution vide. Visual Studio propose des modles de projets contenant les lments par dfaut, les rfrences et configurations pour le type voulu.La slection du type de projet se fait lors de sa cration. La bote de dialogue suivante permet de faire la slection :d Fichier - Nouveau - Projetd Fichier - Nouveau - Projet

    Pour l'application qui sera dveloppe au cours de cet ouvrage, nous allons crer un type de projet Application Windows FormsSelfMailer

    Ds la validation du choix, Visual Studio ouvre la solution avec les fichiers de base, un formulaire Form1.csProgram.cs

    Pour le moment ce projet n'a aucune fonctionnalit. En l'excutant ([F5]), le formulaire Form1Program.cs

    namespace SelfMailer { static class Program { /// /// Point d'entre principal de l'application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Applic...Pour le chargement de grandes solutions, Visual Studio 2017 effectue un chargement allg de la solution lors du dmarrage. Par dfaut, cette fonctionnalit n'est pas active. Vous pouvez le faire, soit globalement, soit pour une solution parti...OutilsOptionsProjets et solutionsChargement de solution allg pour toutes les solutions

    3.1 Dfinir le point d'entre3.1 Dfinir le point d'entreChaque application excutable, par opposition aux bibliothques de classes, doit possder un point d'entre. Ce point d'entre est la mthode MainObjet de dmarrage

    Cette mthode, nomme Mainpublicstatic

    noter que si la mthode ne possde pas l'identificateur d'accs, elle l'hritera de sa classe qui est par dfaut publique.

    3.2 La diffrence entre projets et solutions3.2 La diffrence entre projets et solutionsUn projet est un ensemble de fichiers qui seront compils en un seul assemblage. Une solution est un ensemble dun ou plusieurs projets. De la mme manire qu'un projet a un point d'entre, une solution a un projet de dmarrage. Ce projet est ...Dfinir comme projet de dmarrage

    3.3 Configurer le projet3.3 Configurer le projetLa configuration du projet se fait en cliquant avec le bouton droit sur le projet dans l'explorateur de solutions, puis en slectionnant le menu Proprits

    Cette fentre contient des onglets permettant de configurer les diffrentes parties du projet.L'onglet Application

    Nom de l'assembly : vous pouvez spcifier le nom de l'assemblage qui sera gnr et suivant le type de projet, l'extension Nom de l'assembly : vous pouvez spcifier le nom de l'assemblage qui sera gnr et suivant le type de projet, l'extension Nom de l'assembly : vous pouvez spcifier le nom de l'assemblage qui sera gnr et suivant le type de projet, l'extension Nom de l'assembly.exe.dll

    Espace de noms par dfaut : dfinit l'espace de noms qui sera utilis lors de la cration d'une nouvelle classe dans le projet : Espace de noms par dfaut : dfinit l'espace de noms qui sera utilis lors de la cration d'une nouvelle classe dans le projet : Espace de noms par dfaut

    namespace SelfMailer { ... } Framework cible : permet de spcifier quelle version du Framework .NET sera utilise pour gnrer la solution. Framework cible : permet de spcifier quelle version du Framework .NET sera utilise pour gnrer la solution. Framework cible : permet de spcifier quelle version du Framework .NET sera utilise pour gnrer la solution. Framework cible

    Type de sortie : ce choix est fait en fonction du type d'application produire, si cette proprit est modifie aprs la cration du projet, des changements devront tre apports au point d'entre de l'application et la mthode Type de sortie : ce choix est fait en fonction du type d'application produire, si cette proprit est modifie aprs la cration du projet, des changements devront tre apports au point d'entre de l'application et la mthode Type de sortieMain()

    Objet de dmarrage : dans le cas o plusieurs mthodes Objet de dmarrage : dans le cas o plusieurs mthodes Objet de dmarrageMain()

    Informations de l'assembly : ce bouton ouvre un formulaire permettant de spcifier des proprits telles que le titre de l'application, le copyright, sa version : Informations de l'assembly : ce bouton ouvre un formulaire permettant de spcifier des proprits telles que le titre de l'application, le copyright, sa version : Informations de l'assembly

    Les informations de ce formulaire sont stockes dans le fichier AssemblyInfo.csProperties

    using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("SelfMailer")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Hugon"...L'onglet BuildDebugRelease

    3.4 La conversion de solutions3.4 La conversion de solutionsLes solutions cres avec les versions prcdentes de Visual Studio peuvent tre ouvertes avec la nouvelle version de Visual Studio. Un avertissement sera mis au cas o la solution ne serait pas totalement compatible avec cette version de Vis...

    Visual Studio effectue une sauvegarde de la solution et sauvegarde le journal de conversion dans le dossier de la solution. Cela permet de consulter les erreurs ou avertissements qui auraient pu tre gnrs par la conversion.

    3.5 Les projets partags3.5 Les projets partagsLes projets partags ont t introduits avec Visual Studio 2013 Update 2 et ils sont disponibles par dfaut avec Visual Studio 2017. Les projets partags permettent de centraliser un code reprsentant une logique commune plusieurs applicatio...

    Aprs la cration du projet, vous pouvez ajouter la logique mtier ncessaire. Lors de la cration d'un nouveau projet (par exemple une application Windows ou une application web), vous pourrez ajouter la rfrence au projet partag. Cela res...

    3.6 Les outils de refactorisation3.6 Les outils de refactorisationLa refactorisation permet de modifier la structure du code sans en modifier le comportement. Les options de refactorisation sont disponibles via le menu contextuel dans l'diteur de texte et le menu dition - Refactoriser

    Plusieurs mthodes pour refactoriser le code sont disponibles : Renommer ([F2]) : permet de renommer les variables, mthodes, classes ou espaces de noms. Visual Studio se charge de trouver les rfrences dans le projet et de les remplacer. Visual Studio met en surbrillance tous les lments qui seront renom Renommer ([F2]) : permet de renommer les variables, mthodes, classes ou espaces de noms. Visual Studio se charge de trouver les rfrences dans le projet et de les remplacer. Visual Studio met en surbrillance tous les lments qui seront renom Renommer ([F2]) : permet de renommer les variables, mthodes, classes ou espaces de noms. Visual Studio se charge de trouver les rfrences dans le projet et de les remplacer. Visual Studio met en surbrillance tous les lments qui seront renom Renommer

    Extraire la mthode ([Ctrl] Extraire la mthode ([Ctrl] Extraire la mthode ([Ctrl] Extraire la mthodeR, M

    Encapsuler le champ ([Ctrl] Encapsuler le champ ([Ctrl] Encapsuler le champR, E

    Extraire l'interface ([Ctrl] Extraire l'interface ([Ctrl] Extraire l'interfaceR, I

    Introduire un lment local ([Ctrl] Introduire un lment local ([Ctrl] Introduire un lment local.

    Variable temporaire inline ([Ctrl] Variable temporaire inline ([Ctrl] Variable temporaire inline.

    Supprimer les paramtres ([Ctrl] Supprimer les paramtres ([Ctrl] Supprimer les paramtresR, V

    Rorganiser les paramtres ([Ctrl] Rorganiser les paramtres ([Ctrl] Rorganiser les paramtresR, O

    public int add(int i, int j) { return i + j; } // Appel de la mthode: add(1, 2);Aprs l'inversion des paramtres i et j dans la signature de la mthode, l'appel sera modifi par Visual Studio de la manire suivante :add(2, 1);

    L'architecture .NETL'architecture .NETC# 71. Introduction1. IntroductionLe Framework .NET est l'lment central des applications. Il gre l'excution, l'allocation mmoire, les permissions. L'architecture .NET est principalement constitue de deux composants : d'une part le CLR (Common Language Runtime

    Dsormais, le .NET Core est disponible. Il s'agit d'un sous-ensemble du Framework .NET qui apporte les avantages suivants : Portabilit : le code peut tre port sur diffrentes plateformes afin de maximiser la rutilisation de code. Portabilit : le code peut tre port sur diffrentes plateformes afin de maximiser la rutilisation de code. Portabilit : le code peut tre port sur diffrentes plateformes afin de maximiser la rutilisation de code.

    Modularit : les solutions peuvent intgrer uniquement les librairies utiles pour ne pas surcharger les applications produites. Modularit : les solutions peuvent intgrer uniquement les librairies utiles pour ne pas surcharger les applications produites.

    Open source : les codes sources sont disponibles sur GitHub ( Open source : les codes sources sont disponibles sur GitHub (https:// github.com/dotnet/

    Concernant spcifiquement les applications Windows, le dploiement n'a pas volu. C'est--dire qu'une application s'appuie sur l'installation du Framework .NET de la machine cible. Si le Framework .NET n'est pas prsent, l'utilisateur sera inv...

    2. CLR2. CLRLe CLR est l'environnement d'excution des applications. Il est multilangage grce au CLS (Common Language Specification

    Pour en arriver ce niveau de compatibilit, le compilateur convertit le code en langage intermdiaire (IL) permettant d'tre interprt de la mme manire quel que soit le langage dans lequel le code a t crit. La compatibilit des ty...Common Types SystemintegerintSystem.Int32

    Une fois compile, une application se rsume au moins un fichier excutable. Celui-ci est en langage intermdiaire. Lorsque l'excution est lance, le CLR examine le manifeste pour dterminer si les conditions de scurit sont respectes...Just In Time

    3. Les bibliothques de classes3. Les bibliothques de classesLe Framework .NET est compos de plusieurs bibliothques de classes, classes en espaces de noms, eux-mmes organiss de manire hirarchique partir de l'espace de noms racine SystemSystem.IO

    Voici quelques espaces de noms couramment utiliss :Espace de nomsEspace de noms

    DescriptionDescription

    SystemSystemSystem

    Espace de noms racine. Il contient les types de base du Framework .NET.Espace de noms racine. Il contient les types de base du Framework .NET.

    System.CollectionsSystem.CollectionsSystem.Collections

    Contient les types permettant de crer et de grer les listes et les tableaux.Contient les types permettant de crer et de grer les listes et les tableaux.

    System.DataSystem.DataSystem.Data

    Contient les types requis pour la manipulation et la communication avec les bases de donnes.Contient les types requis pour la manipulation et la communication avec les bases de donnes.

    System.DrawingSystem.DrawingSystem.Drawing

    Contient l'ensemble des types permettant de grer le rendu graphique et le traitement d'lments visuels.Contient l'ensemble des types permettant de grer le rendu graphique et le traitement d'lments visuels.

    System.IOSystem.IOSystem.IO

    Contient l'ensemble des classes permettant d'interagir avec le systme de fichiers.Contient l'ensemble des classes permettant d'interagir avec le systme de fichiers.

    System.Windows.FormsSystem.Windows.FormsSystem.Windows.Forms

    Contient tous les types permettant la cration d'applications Windows, que ce soit les formulaires ou les contrles.Contient tous les types permettant la cration d'applications Windows, que ce soit les formulaires ou les contrles.

    Ces bibliothques de classes sont consultables via l'explorateur d'objets depuis le menu Affichage - Explorateur dobjetsW, J

    Il n'est pas rare d'avoir besoin de bibliothques de classes autres que celles fournies par le Framework .NET, pour pouvoir les utiliser dans un projet. Il suffit d'ajouter une rfrence vers la librairie de classes.Dans l'explorateur de solutions, un clic avec le bouton droit sur le nud RfrencesAjouter une rfrence

    Il est possible de choisir une rfrence vers les classes .NET, COM, partir d'un autre projet de la solution ou de toute autre librairie de classes.

    4. Les types4. Les typesLe Framework .NET est compos de deux sortes de types : les types valeur et les types rfrence. Pour stocker les donnes, le CLR dispose de deux zones de mmoire : la pile et le tas.La pile a un fonctionnement du type : dernier entr, premier sorti. Cette zone va hberger en mmoire les variables du programme, ainsi lorsqu'une fonction est appele, ses paramtres sont stocks dans la pile et si cette fonction en appelle d'...Le tas est une zone rserve au stockage des objets rutilisables. Le CLR gre les entres et sorties de cet espace mmoire de manire automatique grce la rcupration de la mmoire. Ce processus tant toujours actif, il est inutile d...Dispose()

    4.1 Les types valeur4.1 Les types valeurL'espace mmoire utilis par une donne de type valeur est affect la pile pendant sa dure de vie, puis, lorsque la variable est hors de porte, l'espace mmoire est libr.Les types valeur sont classiquement les types de base tels que les boolens (boolintcharstructenum

    Un type valeur contient rellement la donne qu'il reprsente en mmoire, il ne peut donc, par consquent, pas tre vide (null

    L'instruction suivante dclare une variable de type entier (int

    int i = 1;La dclaration de cette variable entrane la rservation d'un espace mmoire de 32 bits et lui affecte la valeur 1.Examinons l'exemple suivant :bool b1 = true; bool b2 = b1; b1 = false;Une premire variable (b1) de type boolen est cre avec la valeur truetrue

    4.2 Les types rfrence4.2 Les types rfrenceLes types rfrence ont un fonctionnement diffrent au niveau de la mmoire. Les donnes relles du type sont stockes dans le tas et un pointeur vers ces donnes est stock dans la pile. Ainsi lors de l'utilisation d'une variable de type r...Les classes, les interfaces et les dlgus reprsentent des types rfrence et la manipulation des objets crs partir de ces types se fait indirectement via une rfrence vers leur espace mmoire allou.Un type rfrence, la diffrence d'un type valeur, doit tre instanci grce au mot-cl newArrayListSystem.Collections

    ArrayList tab1 = new ArrayList(); ArrayList tab2 = new ArrayList(1);La premire instanciation cre un objet de type ArrayList

    Un type rfrence peut avoir une valeur vide (null

    Pour illustrer le fonctionnement en mmoire d'un type rfrence, prenons la classe suivante :class Class { public bool b; }Ralisons les oprations suivantes avec cette classe :Class C1 = new Class(); C1.b = true; Class C2 = C1; C1.b = false;Un premier objet est instanci. La valeur true

    Introduction au langage C#Introduction au langage C#C# 71. La syntaxe1. La syntaxe1.1 Les identifiants1.1 Les identifiantsLes identifiants sont les noms donns aux classes et leurs membres. Un identifiant doit tre compos d'un seul mot commenant par une lettre ou un caractre underscore (_). Les identifiants peuvent tre composs de lettres majuscules ou min...monIdentifiantMonIdentifiant

    1.2 Les mots-cls1.2 Les mots-clsLes mots-cls sont des noms rservs par le langage C#. Ils sont interprts par le compilateur et ne peuvent donc pas tre utiliss en tant qu'identifiants. Ces mots-cls sont distingus dans l'diteur de texte de Visual Studio en tant c...Si vous avez besoin d'utiliser un mot-cl en tant qu'identifiant pour un membre, il faut prfixer le nom de l'identifiant par le caractre @

    private bool lock;En prfixant le membre lock@

    private bool @lock;Le caractre @@monIdentifiantmonIdentifiant

    Voici une liste des mots-cls du langage C#. Ils seront expliqus, en partie, au cours de l'ouvrage : abstractabstractabstract

    addaddadd

    asasas

    ascendingascendingascending

    asyncasyncasync

    awaitawaitawait

    basebasebase

    boolboolbool

    breakbreakbreak

    bybyby

    bytebytebyte

    casecasecase

    catchcatchcatch

    charcharchar

    checkedcheckedchecked

    classclassclass

    constconstconst

    continuecontinuecontinue

    decimaldecimaldecimal

    defaultdefaultdefault

    delegatedelegatedelegate

    descendingdescendingdescending

    dododo

    doubledoubledouble

    dynamicdynamicdynamic

    elseelseelse

    equalsequalsequals

    enumenumenum

    eventeventevent

    explicitexplicitexplicit

    externexternextern

    falsefalsefalse

    finallyfinallyfinally

    fixedfixedfixed

    floatfloatfloat

    forforfor

    foreachforeachforeach

    fromfromfrom

    getgetget

    globalglobalglobal

    gotogotogoto

    groupgroupgroup

    ififif

    implicitimplicitimplicit

    ininin

    intintint

    interfaceinterfaceinterface

    internalinternalinternal

    intointointo

    isisis

    joinjoinjoin

    letletlet

    locklocklock

    longlonglong

    nameofnameofnameof

    namespacenamespacenamespace

    newnewnew

    nullnullnull

    objectobjectobject

    ononon

    operatoroperatoroperator

    orderbyorderbyorderby

    outoutout

    overrideoverrideoverride

    paramsparamsparams

    partialpartialpartial

    privateprivateprivate

    protectedprotectedprotected

    publicpublicpublic

    readonlyreadonlyreadonly

    refrefref

    removeremoveremove

    returnreturnreturn

    sbytesbytesbyte

    sealedsealedsealed

    selectselectselect

    setsetset

    shortshortshort

    sizeofsizeofsizeof

    stackallocstackallocstackalloc

    staticstaticstatic

    stringstringstring

    structstructstruct

    switchswitchswitch

    thisthisthis

    throwthrowthrow

    truetruetrue

    trytrytry

    typeoftypeoftypeof

    uintuintuint

    ulongulongulong

    uncheckeduncheckedunchecked

    unsafeunsafeunsafe

    ushortushortushort

    usingusingusing

    valuevaluevalue

    varvarvar

    virtualvirtualvirtual

    volatilevolatilevolatile

    voidvoidvoid

    wherewherewhere

    whilewhilewhile

    yieldyieldyield

    1.3 La ponctuation1.3 La ponctuationLa ponctuation a pour objectif de sparer les instructions du programme de manire logique, comprhensible par l'humain et interprtable par le compilateur.Toute instruction doit se terminer par un point-virgule ;

    int i = 5 + 2;Le point .

    monObjet.maProprieteLes accolades {}

    class Program { }Les parenthses (),

    monObjet.maMethode(Parametre1, Parametre2);Les parenthses sont galement utilises pour grouper les instructions de la mme manire que pour une opration mathmatique.Les crochets []monObjetstring

    string s = monObjet[0];Les lments des tableaux sont indexs partir de 0.

    1.4 Les oprateurs1.4 Les oprateurs1.4.1 Les oprateurs de calcul1.4.1 Les oprateurs de calculLes oprateurs de calcul permettent, comme en mathmatiques, d'effectuer des oprations.L'addition est ralise avec l'oprateur +

    i = 5 + 2; // i = 7La soustraction est ralise avec l'oprateur -

    i = 5 - 2; // i = 3La multiplication est ralise avec l'oprateur *

    i = 5 * 2; // i = 10La division est ralise avec l'oprateur /

    i = 6 / 2; // i = 3Le modulo est ralis avec l'oprateur %

    i = 5 % 2; // i = 1

    1.4.2 Les oprateurs d'assignation1.4.2 Les oprateurs d'assignationLes oprateurs d'assignation permettent d'assigner une valeur une variable. L'oprateur le plus utilis est le caractre =

    i = x;Il est galement possible de raliser une assignation et un calcul en mme temps en combinant deux oprateurs :i += 1;en utilisant l'oprateur +=

    i = i + 1;La combinaison d'oprateurs de calcul et d'assignation est valable pour tous les oprateurs :int i = 5; i += 2; // i = 7 i -= 2; // i = 5 i *= 2; // i = 10 i /= 2; // i = 5 i %= 2; // i = 1

    1.4.3 Les oprateurs de comparaison1.4.3 Les oprateurs de comparaisonLes oprateurs de comparaison sont essentiellement utiliss dans le cadre de dcisions au sein d'instructions de contrle.L'oprateur ==

    x == y // renvoie true si x gale yL'oprateur !=

    x != y // renvoie true si x est diffrent de yL'oprateur >

    x > y // renvoie true si x est suprieur yL'oprateur >=

    x >= y // renvoie true si x est suprieur ou gal yL'oprateur 10) { // Instructions excutes si x est suprieur 10 } else if (x = 10) { // Instructions excutes si x est gal 10 } else { // Instructions excutes si x est infrieur 10 }Les instructions au sein de la structure de dcision sont entoures par des accolades indiquant le dbut et la fin du bloc. Au cas o le bloc ne contiendrait qu'une seule ligne, il est permis de les omettre (valable aussi pour les autres instruct...if (x > 10) x -= 10; else if (x = 10) x -= 1; else x += 10;L'oprateur de condition null ?.nullnull

    string MajorVersion; if(soft!=null && soft.Version!=null) { MajorVersion = soft.Version.Major; }Avec le nouvel oprateur, la syntaxe est plus simple :string MajorVersion = soft?.Version?.Major; Si la variable softnullsoft?.Versionnullsoft?.Versionnullsoft?.Version?.MajornullnullMajorMajorVersion

    switchSyntaxe gnrale :switch (expression) { case expression ou constante: instructions [instructions de saut] [default: instructions] }Une instruction switchifelse ifelse

    L'instruction switch

    switch (i) { case 0: i++; break; case 1: i--; break; default: i = 0; break; }Le mot-cl defaultdefault

    Chaque bloc d'instructions au sein d'une valuation doit contenir le mot-cl breakswitchswitch

    Il est possible de combiner plusieurs valuations si celles-ci doivent excuter les mmes instructions :switch (i) { case 0: case 1: case 2: i++; break; case 3: i--; break; }Dans le cadre d'une instruction switchwhen

    switch (o) { case int i when i < 0: break; case int i when i > 0: break; }Le programme entre dans la boucle de dcision si iinti

    1.6.2 Les instructions itratives1.6.2 Les instructions itrativesLes instructions itratives permettent d'effectuer des boucles sur une srie d'instructions en fonction de l'valuation d'une expression. Les instructions itratives sont les boucles forwhiledo whileforeach

    forSyntaxe gnrale :for (initialisation; expression; pas) { instructions }Une boucle for

    int total = 0; for (int i = 0; i < 4; i++) { total += i; } // total = 6Le code prcdent dclare une variable totalforii

    La variable dclare dans l'instruction for

    for (int i = 0; i < 4; i++) { i++; } // Le corps de la boucle for est excut deux foisIl est galement possible de dfinir un pas ngatif :for (int i = 10; i > 0; i--) {}whileSyntaxe gnrale :while (expression) { instructions }Une boucle while

    int i = 0; while (i < 4) { i++; } // i = 3do whileSyntaxe gnrale :do { instructions } while (expression);La boucle do whilewhiledo whiledo while

    int i = 0; do { i--; } while (i >= 0); // i = -1foreachSyntaxe gnrale :foreach (type nom in object) { instructions }Les boucles foreach

    string s1 = "foreach"; string s2 = ""; foreach (char c in s1) { s2 += c; } // s2 = "foreach"La variable s1stringcharforeachccharc

    1.6.3 Les instructions de saut1.6.3 Les instructions de sautLes instructions de saut permettent de modifier le flux d'excution du programme. Les instructions de saut sont breakcontinuegotoreturnthrow

    breakL'instruction breakswitch

    for (int i = 0; i < 10; i++) { if (i == 5) { break; } } // i = 5, le corps de la boucle a t excut 5 foiscontinueL'instruction continue

    for (int i = 0; i < 10; i++) { if (i > 5) { continue; } } // i = 5, le corps de la boucle a t excut 10 foisgotoL'instruction goto

    Une instruction goto:

    int i = 0; ajout: i++; if (i < 5) { goto ajout; } // i = 5L'instruction gotoswitchgoto

    int i = 0; switch (i) { case 0: i++; goto 1; case 1: i--; goto default; default: i = 0; break; }returnL'instruction return

    int Addition(int i, int j) { return i + j; }throwL'instruction throw

    throw new Exception();La gestion des exceptions sera tudie plus en dtail dans le chapitre consacr la gestion des erreurs.La gestion des exceptions sera tudie plus en dtail dans le chapitre consacr la gestion des erreurs.

    1.7 Les commentaires1.7 Les commentairesLe code peut contenir des commentaires afin de faciliter sa comprhension sil devait tre tudi par un autre dveloppeur ou si de la maintenance tait requise.Les commentaires commencent par le double signe //

    Pour insrer des commentaires sur plusieurs lignes, ils doivent commencer par les caractres /**/

    /* Mon commentaire sur plusieurs lignes */L'diteur de texte de Visual Studio colorise les commentaires en vert (paramtre par dfaut).Bien plus que pour laisser des annotations, les commentaires peuvent galement servir pour fournir une documentation au format XML. Cette documentation XML pourra tre interprte par l'IntelliSense pour fournir la description des membres, des pa...Un commentaire de documentation est plac directement avant le membre qu'il dcrit et commence avec la suite de caractres //////

    /// /// /// public Form1() { InitializeComponent(); }En plaant un contenu entre les balises summary

    /// /// Mon commentaire /// Il sera interprt par l'IntelliSense de Visual Studio :

    Voici une liste des balises les plus utilises et reconnues pour la documentation XML :BaliseBalise

    SyntaxeSyntaxe

    DescriptionDescription

    summary summary summary

    ... ...

    Indique ce que l'info-bulle de l'IntelliSense doit afficher.Indique ce que l'info-bulle de l'IntelliSense doit afficher.

    remarks remarks remarks

    ... ...

    Texte supplmentaire de description du type ou du membre.Texte supplmentaire de description du type ou du membre.

    param param param

    ... x * 2; int i = M(10); // i = 20Le compilateur rsout une expression lambda de ce type en crant une mthode prive et en dplaant l'expression dans cette mthode.Chacun des paramtres de l'expression lambda correspond un paramtre du dlgu et le type de l'expression correspond au type de retour du dlgu. Dans l'exemple prcdent, xix * 2

    Une expression lambda peut conte