vb.net et visual studio 2015 les fondamentaux du...

21
Sébastien PUTIER VB.NET et Visual Studio 2015 Les fondamentaux du langage

Upload: nguyendan

Post on 27-Mar-2018

222 views

Category:

Documents


2 download

TRANSCRIPT

ISBN

: 97

8-2-

7460

-983

1-2

29,9

0 €

Pour plus d’informations :

Sébastien PUTIER

Ce livre s’adresse aux développeurs souhaitant maîtriser le développement d’applications .NET avec le langage Visual Basic .NET dans sa version 2015. Après un tour d’horizon de la plateforme .NET et une description des outils fournis par l’environnement Visual Studio 2015, le lecteur découvrira pro-gressivement les éléments clés de Visual Basic et la program-mation orientée objet, jusqu’à pouvoir appliquer ce concept au développement d’applications Windows avec WPF. Une ini-tiation aux techniques de débogage avec Visual Studio lui per-mettra de parfaire sa maîtrise de l’outil.

Le développement d’applications client-serveur est ensuite traité par le thème de l’accès aux données avec ADO.NET. Une des-cription complète de LINQ au travers d’exemples concrets montre comment ses fonctionnalités simplifient la manipulation des données provenant de sources diverses. Un chapitre est ensuite consacré à la manipulation de données au format XML, permettant l’échange de données entre applications d’une ma-nière simple et standardisée. La fin du cycle de développement est traitée à travers le déploiement d’une application avec les technologies Windows Installer puis ClickOnce.

Afin d’aider le lecteur dans son apprentissage, un aide-mémoire est fourni ; il résume l’utilité des mots-clés de Visual Basic traités dans le livre.

Les exemples présentés dans ces pages sont disponibles en télé-chargement sur le site www.editions-eni.fr.

VB.NET et Visual Studio 2015Les fondamentaux du langage

Les chapitres du livre

Avant-propos • La plateforme .NET • Visual  Studio  2015  •  L’organisation d’une application • Les bases du lan-gage  •  La  programmation  orientée objet  avec  VB.NET  •  Débogage  et gestion des erreurs • Développement d’applications Windows  • Accès aux données  •  LINQ  •  XML  •  Déploie-ment • Aide-mémoire

Sébastien PUTIER

Consultant et Formateur depuis plu-sieurs années, Sébastien PUTIER apporte son expertise dans la mise en œuvre de solutions Windows, Web et mobiles avec la plateforme .NET depuis ses premières versions. Il  est  certifié  techniquement  (MCPD - MCSD) et pédagogiquement (MCT) par Microsoft. À travers les pages de ce livre, il transmet toute son expé-rience sur le langage VB.NET pour que le lecteur acquiert les fondamen-taux et soit capable de tirer le meil-leur parti possible des fonctionnalités offertes par la plateforme .NET.

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Le code source des exemples

traités dans le livre. VB.N

ET e

t Vis

ual S

tudi

o 20

15Le

s fo

ndam

enta

ux d

u la

ngag

e VB.NET et Visual Studio 2015

Les fondamentaux du langage

1Table des matières

Avant-propos

Chapitre 1La plateforme .NET

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

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

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

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

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

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

7. Une première application avec Visual Basic .NET . . . . . . . . . . . . . . . 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 RI15NETVB 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

VB.NET et Visual Studio 2015

Chapitre 2Visual Studio 2015

1. Installation et premier lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371.2 Éditions de Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

1.2.1 Visual Studio Express . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.2.2 Visual Studio Community. . . . . . . . . . . . . . . . . . . . . . . . 391.2.3 Éditions commerciales . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

1.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401.4 Premier lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

2. Description des outils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.1 Barres d'outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.2 Explorateur de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.3 Explorateur d'objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.4 Explorateur de serveurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.5 Fenêtre de propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632.6 Fenêtre d'édition de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

2.6.1 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.6.2 Suivi des modifications . . . . . . . . . . . . . . . . . . . . . . . . . . 652.6.3 Mise en surbrillance des références . . . . . . . . . . . . . . . . . 662.6.4 Refactorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672.6.5 IntelliSense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.6.6 Snippets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Chapitre 3L'organisation d'une application

1. Les solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711.2 Création d'une solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721.3 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

3Table des matières

1.4 Actions disponibles sur une solution. . . . . . . . . . . . . . . . . . . . . . 741.4.1 Ajout et suppression d'un projet . . . . . . . . . . . . . . . . . . . 741.4.2 Création d'un dossier de solution . . . . . . . . . . . . . . . . . . 751.4.3 Chargement et déchargement d’un projet . . . . . . . . . . . 761.4.4 Création d'un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771.4.5 Génération de la solution. . . . . . . . . . . . . . . . . . . . . . . . . 77

1.5 Configuration de la solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781.5.1 Configuration des projets de démarrage . . . . . . . . . . . . . 781.5.2 Dépendances du projet. . . . . . . . . . . . . . . . . . . . . . . . . . . 801.5.3 Paramètres d'analyse du code. . . . . . . . . . . . . . . . . . . . . . 811.5.4 Fichiers sources pour le débogage . . . . . . . . . . . . . . . . . . 821.5.5 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

2. Les projets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842.1 Création d'un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842.2 Propriétés d'un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

2.2.1 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922.2.2 Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982.2.3 Déboguer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052.2.4 Références . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072.2.5 Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082.2.6 Paramètres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Chapitre 4Les bases du langage

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

2. Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112.1 Nommage des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122.2 Type des variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

2.2.1 Types valeurs et types références . . . . . . . . . . . . . . . . . 1132.2.2 Types intégrés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

2.3 Déclaration des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.4 Portée des variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

4Les fondamentaux du langage

VB.NET et Visual Studio 2015

2.5 Modificateurs d'accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.6 Inférence de type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

3. Les constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

4. Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.1 Les opérateurs d’accès. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

4.1.1 Accès simple : . (point). . . . . . . . . . . . . . . . . . . . . . . . . . 1224.1.2 Accès avec nullité conditionnelle : ? . . . . . . . . . . . . . . . 1224.1.3 Accès indexé : () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

4.2 Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . . . . . . 1234.3 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . 1244.4 L'opérateur conditionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

4.4.1 Opérateur ternaire : If(prédicat, valeur1, valeur2) . . . . 1254.4.2 Opérateur de fusion de valeur nulle :

If(valeur1, valeur2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.5 Les opérateurs logiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

4.5.1 Négation : Not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.5.2 ET logique : And . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.5.3 OU logique : Or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.5.4 OU exclusif : Xor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1284.5.5 ET conditionnel : AndAlso. . . . . . . . . . . . . . . . . . . . . . . 1284.5.6 OU conditionnel : OrElse. . . . . . . . . . . . . . . . . . . . . . . . 128

4.6 Les opérateurs binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294.6.1 ET binaire : And . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294.6.2 OU binaire : Or. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294.6.3 OU exclusif : Xor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304.6.4 Négation : Not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304.6.5 Décalage vers la droite : >> . . . . . . . . . . . . . . . . . . . . . 1314.6.6 Décalage vers la gauche : << . . . . . . . . . . . . . . . . . . . . 131

4.7 Les opérateurs de concaténation . . . . . . . . . . . . . . . . . . . . . . . . 131

5. Les structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325.1 Les structures conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . 132

5.1.1 If … Else ... End If. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325.1.2 Select Case ... End Select . . . . . . . . . . . . . . . . . . . . . . . . 133

5Table des matières

5.2 Les structures d'itération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.2.1 For ... Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.2.2 While ... End While. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.2.3 Do ... Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375.2.4 For Each ... Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375.2.5 Contrôler l'exécution d'une boucle . . . . . . . . . . . . . . . . 138

5.3 Autres structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395.3.1 Using ... End Using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395.3.2 GoTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.3.3 With ... End With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

6. Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426.1 Écriture d'une fonction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426.2 Paramètres de fonction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446.3 Procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486.4 Surcharges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

7. Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Chapitre 5La programmation orientée objet avec VB.NET

1. Principes de la programmation orientée objet . . . . . . . . . . . . . . . . . 153

2. Les classes et structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

2.1.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562.1.2 Constructeur et destructeur . . . . . . . . . . . . . . . . . . . . . 1592.1.3 Classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

2.2 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642.3 Méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

2.3.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.3.2 Méthodes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.3.3 Méthodes d'extension . . . . . . . . . . . . . . . . . . . . . . . . . . 1672.3.4 Méthodes opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

6Les fondamentaux du langage

VB.NET et Visual Studio 2015

2.4 Propriétés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702.4.1 Lecture et écriture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702.4.2 Lecture seule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712.4.3 Écriture seule. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712.4.4 Propriétés automatiques . . . . . . . . . . . . . . . . . . . . . . . . 1722.4.5 Propriétés automatiques en lecture seule . . . . . . . . . . . 1732.4.6 Propriétés indexées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

2.5 Membres statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1742.6 Utilisation des classes et des structures . . . . . . . . . . . . . . . . . . 175

2.6.1 Instanciation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1762.6.2 Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1762.6.3 Types anonymes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

3. Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1803.1 Nomenclature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1803.2 Le mot-clé Imports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

4. L’héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834.1 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834.2 Les mots-clés Me, MyBase et MyClass . . . . . . . . . . . . . . . . . . . 1844.3 Redéfinition et masquage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

4.3.1 Redéfinition de méthode . . . . . . . . . . . . . . . . . . . . . . . . 1864.3.2 Masquage de méthode . . . . . . . . . . . . . . . . . . . . . . . . . . 1874.3.3 Différence entre redéfinition et masquage . . . . . . . . . . 187

4.4 Imposer ou interdire l'héritage. . . . . . . . . . . . . . . . . . . . . . . . . . 1904.5 Transtypage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

5. Les interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1955.1 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1965.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

6. Les modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

7. Les énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

7Table des matières

8. Les délégués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2038.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2038.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2048.3 Expressions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

9. Les événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2069.1 Déclaration et déclenchement . . . . . . . . . . . . . . . . . . . . . . . . . . 2069.2 Gestion des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

10. Les génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21210.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

10.1.1 Définition d'une classe générique . . . . . . . . . . . . . . . . . 21310.1.2 Utilisation d'une classe générique . . . . . . . . . . . . . . . . . 213

10.2 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21410.2.1 Définition d'une interface générique. . . . . . . . . . . . . . . 21410.2.2 Utilisation d'une interface générique . . . . . . . . . . . . . . 215

10.3 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21610.4 Méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

10.4.1 Définition d'une méthode générique. . . . . . . . . . . . . . . 21910.4.2 Utilisation d'une méthode générique . . . . . . . . . . . . . . 220

10.5 Événements et délégués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

11. Les collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22311.1 Types existants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

11.1.1 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22311.1.2 ArrayList et List(Of T) . . . . . . . . . . . . . . . . . . . . . . . . . . 22411.1.3 Hashtable et Dictionary(Of TKey, TValue) . . . . . . . . . 22811.1.4 Stack et Stack(Of T). . . . . . . . . . . . . . . . . . . . . . . . . . . . 23011.1.5 Queue et Queue(Of T). . . . . . . . . . . . . . . . . . . . . . . . . . 231

11.2 Choisir un type de collection . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

12. Les objets intrinsèques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

13. La programmation asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23613.1 Les objets Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23613.2 Écrire du code asynchrone avec Async et Await . . . . . . . . . . . 239

8Les fondamentaux du langage

VB.NET et Visual Studio 2015

Chapitre 6Débogage et gestion des erreurs

1. Les différents types d'erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2411.1 Erreurs de compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2411.2 Erreurs d'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

2. Utilisation des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2442.1 Création et déclenchement d'exceptions . . . . . . . . . . . . . . . . . 244

2.1.1 La classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2442.1.2 Le mot-clé Throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2452.1.3 Exceptions spécialisées . . . . . . . . . . . . . . . . . . . . . . . . . . 245

2.2 Gérer les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2462.2.1 La structure Try … Catch ... End Try . . . . . . . . . . . . . . 2462.2.2 Les filtres d’exception. . . . . . . . . . . . . . . . . . . . . . . . . . . 2482.2.3 Le bloc Finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

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

3.1.1 Démarrage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2513.1.2 Arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.1.3 Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.1.4 Reprise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

3.2 Points d'arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2543.3 Visualiser le contenu des variables . . . . . . . . . . . . . . . . . . . . . . 260

3.3.1 DataTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2603.3.2 Fenêtres Espion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2613.3.3 Fenêtre Espion express . . . . . . . . . . . . . . . . . . . . . . . . . . 2623.3.4 Fenêtre Automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . 2633.3.5 Fenêtre Variables locales . . . . . . . . . . . . . . . . . . . . . . . . 264

3.4 Compilation conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

9Table des matières

Chapitre 7Développement d'applications Windows

1. Présentation de WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2691.1 Structure d'une application WPF. . . . . . . . . . . . . . . . . . . . . . . . 2701.2 XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

1.2.1 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2721.2.2 Espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

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

2. Utilisation des contrôles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2782.1 Ajout de contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2792.2 Positionnement et dimensionnement des contrôles . . . . . . . . 2822.3 Ajout d'un gestionnaire d'événements à un contrôle . . . . . . . . 286

3. Les principaux contrôles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2873.1 Contrôles de fenêtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

3.1.1 Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2883.1.2 NavigationWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

3.2 Contrôles de disposition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2933.2.1 Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2933.2.2 StackPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.2.3 DockPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.2.4 WrapPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2983.2.5 Canvas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

3.3 Contrôles d'affichage de données . . . . . . . . . . . . . . . . . . . . . . . 3013.3.1 TextBlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.3.2 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.3.3 Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3033.3.4 ScrollViewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.3.5 ItemsControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3053.3.6 StatusBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3083.3.7 ToolTip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

10Les fondamentaux du langage

VB.NET et Visual Studio 2015

3.4 Contrôles d'édition de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.4.1 TextBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.4.2 RichTextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3113.4.3 PasswordBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

3.5 Contrôles de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3133.5.1 RadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3133.5.2 CheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3143.5.3 ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3143.5.4 ListBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3153.5.5 ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3173.5.6 TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3193.5.7 Slider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3243.5.8 Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3243.5.9 DatePicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

3.6 Contrôles d'action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3253.6.1 Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3263.6.2 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3263.6.3 ContextMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3293.6.4 ToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

4. Interactions clavier et souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3314.1 Événements clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3314.2 Événements souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3334.3 Glisser-déposer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

5. Aller plus loin avec WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3385.1 Introduction à l'utilisation de Blend . . . . . . . . . . . . . . . . . . . . . 338

5.1.1 L'interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3395.1.2 Ajout et modification de contrôles visuels . . . . . . . . . . 347

5.2 Introduction à MVVM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3505.2.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3505.2.2 Les interfaces INotifyPropertyChanged

et INotifyCollectionChanged . . . . . . . . . . . . . . . . . . . . 3515.2.3 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3525.2.4 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

11Table des matières

Chapitre 8Accès aux données

1. Principes d'une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3691.1 Terminologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3691.2 Le langage SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

1.2.1 Recherche d'enregistrements . . . . . . . . . . . . . . . . . . . . . 3711.2.2 Ajout d'enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . 3731.2.3 Mise à jour d'informations. . . . . . . . . . . . . . . . . . . . . . . 3731.2.4 Suppression d'informations . . . . . . . . . . . . . . . . . . . . . . 374

2. ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.2 Les fournisseurs de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

2.2.1 SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.2.2 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.2.3 OLE DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3772.2.4 ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

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

3.1.1 Chaînes de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . 3783.1.2 Pool de connexions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3813.1.3 Gestion de la connexion. . . . . . . . . . . . . . . . . . . . . . . . . 383

3.2 Création et exécution de commandes . . . . . . . . . . . . . . . . . . . . 3853.2.1 Définition et création d'une commande . . . . . . . . . . . . 3853.2.2 Sélection de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.2.3 Actions sur les données . . . . . . . . . . . . . . . . . . . . . . . . . 3873.2.4 Paramétrage d'une commande . . . . . . . . . . . . . . . . . . . . 3883.2.5 Exécution de procédures stockées . . . . . . . . . . . . . . . . . 390

4. Utiliser ADO.NET en mode déconnecté. . . . . . . . . . . . . . . . . . . . . . 3924.1 DataSet et DataTable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

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

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

12Les fondamentaux du langage

VB.NET et Visual Studio 2015

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

4.2.1 Lecture des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3994.2.2 Création de contraintes . . . . . . . . . . . . . . . . . . . . . . . . . 4004.2.3 Relations entre DataTables . . . . . . . . . . . . . . . . . . . . . . 4034.2.4 État et versions d'une DataRow . . . . . . . . . . . . . . . . . . 4054.2.5 Modification de données . . . . . . . . . . . . . . . . . . . . . . . . 4074.2.6 Suppression de données . . . . . . . . . . . . . . . . . . . . . . . . . 4084.2.7 Valider ou annuler des modifications . . . . . . . . . . . . . . 4084.2.8 Filtrage et tri à l'aide d'une DataView. . . . . . . . . . . . . . 4094.2.9 Recherche de données . . . . . . . . . . . . . . . . . . . . . . . . . . 412

4.3 Valider les modifications au niveau de la base de données . . . 4144.3.1 Générer des commandes

de mise à jour automatiquement . . . . . . . . . . . . . . . . . 4154.3.2 Commandes de mise à jour personnalisées. . . . . . . . . . 4174.3.3 Gestion des accès concurrentiels . . . . . . . . . . . . . . . . . . 417

5. Utiliser les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

Chapitre 9LINQ

1. Présentation de LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

2. Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4242.1 Une première requête LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 4272.2 Les opérateurs de requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

2.2.1 Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4302.2.2 Filtrage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4322.2.3 Tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4332.2.4 Partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4352.2.5 Jointure et regroupement. . . . . . . . . . . . . . . . . . . . . . . . 4362.2.6 Agrégation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

13Table des matières

3. LINQ to SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4403.1 Le mappage objet-relationnel. . . . . . . . . . . . . . . . . . . . . . . . . . . 441

3.1.1 Utilisation de SQLMetal . . . . . . . . . . . . . . . . . . . . . . . . 4413.1.2 Utilisation du concepteur objet/relationnel . . . . . . . . . 448

3.2 Utilisation de LINQ to SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4563.2.1 Récupération de données . . . . . . . . . . . . . . . . . . . . . . . . 4563.2.2 Mise à jour de données. . . . . . . . . . . . . . . . . . . . . . . . . . 4583.2.3 Gestion des conflits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

Chapitre 10XML

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

2. Structure d'un fichier XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4642.1 Constituants d'un document XML . . . . . . . . . . . . . . . . . . . . . . 4642.2 Document bien formé et document valide . . . . . . . . . . . . . . . . 469

3. Manipuler un document XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4693.1 Utilisation de DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4703.2 Utilisation de XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4753.3 Utilisation de LINQ to XML . . . . . . . . . . . . . . . . . . . . . . . . . . . 478

Chapitre 11Déploiement

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

2. Windows Installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4842.1 Installation de InstallShield Limited Edition . . . . . . . . . . . . . . 4852.2 Création d'un projet d'installation . . . . . . . . . . . . . . . . . . . . . . 487

2.2.1 Informations sur l'application . . . . . . . . . . . . . . . . . . . . 4882.2.2 Prérequis d'installation . . . . . . . . . . . . . . . . . . . . . . . . . . 4902.2.3 Fichiers de l'application . . . . . . . . . . . . . . . . . . . . . . . . . 4912.2.4 Raccourcis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4932.2.5 Valeurs de la base de registre . . . . . . . . . . . . . . . . . . . . . 494

14Les fondamentaux du langage

VB.NET et Visual Studio 2015

2.2.6 Boîtes de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495

3. ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4973.1 La technologie ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497

3.1.1 Principes de fonctionnement . . . . . . . . . . . . . . . . . . . . . 4983.1.2 Méthodes de déploiement disponibles . . . . . . . . . . . . . 4993.1.3 Les mises à jour d'applications avec ClickOnce . . . . . . 500

3.2 La publication ClickOnce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502

Aide-mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

111

Chapitre 4

Les bases du langage

Les bases du langage1. Introduction

Comme tous les langages de programmation, Visual Basic .NET imposecertaines règles au développeur. Ces règles se manifestent au travers de la syn-taxe du langage mais elles couvrent le large spectre fonctionnel proposé parVB.NET. Avant d'explorer en profondeur les fonctionnalités du langage auchapitre suivant, nous étudierons donc les notions essentielles et fondamen-tales de VB.NET : la création de données utilisables par une application et letraitement de ces données.

2. Les variables

Les données utilisables dans un programme VB.NET sont représentées par desvariables. Une variable est un espace mémoire réservé auquel on assigne arbi-trairement un nom et dont le contenu est une valeur dont le type est fixé. Onpeut manipuler ce contenu dans le code en utilisant le nom de la variable.

© E

dit

ions

EN

I -

All r

ights

rese

rved

112Les fondamentaux du langage

VB.NET et Visual Studio 2015

2.1 Nommage des variables

La spécification du langage établit quelques règles à prendre en compte lorsquel'on nomme une variable :

– Le nom d'une variable ne peut comporter que des chiffres, des caractères del'alphabet latin, accentués ou non, le caractère ç ou les caractères spéciauxsuivants : _ μ

– Le nom d'une variable ne peut en aucun cas commencer par un chiffre. Ilpeut en revanche en comporter un ou plusieurs à toute autre position.

– Le langage est insensible à la casse, c’est-à-dire qu'il ne fait aucunedistinction entre majuscules et minuscules : les variables unevariable etuneVariable sont équivalentes.

– Un nom de variable ne peut pas excéder 511 caractères. Il n'est évidemmentpas recommandé d'avoir des noms de variable aussi longs, le maximum enpratique étant plus souvent de l'ordre de la trentaine de caractères.

– Le nom d'une variable ne peut pas être un mot-clé du langage. Il est toutefoispossible d'encadrer un mot-clé par les caractères [ et ] pour utiliser un nomde variable similaire.

Les noms de variables suivants sont acceptés par le compilateur Visual Basic :

– maVariable

– maVariableNumero1

– [Next] (Next est un mot-clé de VB.NET)

– µn3_VàRïãbl3

De manière générale, il est préférable d'utiliser des noms de variables expli-cites, c’est-à-dire permettant de savoir à quoi correspond la valeur stockéedans la variable, comme nomClient, montantAchat ou ageDuCapi-taine.

113Les bases du langageChapitre 4

2.2 Type des variables

Une des caractéristiques de VB.NET est la notion de typage statique : chaquevariable correspond à un type de données et ne peut en changer. De plus, cetype doit être déterminable au moment de la compilation.

2.2.1 Types valeurs et types références

Les différents types utilisables avec VB.NET peuvent être décomposés en deuxfamilles : les types valeurs et les types références. Cette notion peut êtredéconcertante au premier abord, puisqu'une variable représente justementune donnée et donc une valeur. Ce concept est en fait lié à la manière dont eststockée l'information en mémoire.

Lorsque l'on utilise une variable de type valeur, on accède directement à lazone mémoire stockant la donnée. Au moment de la création d'une variablede type valeur, une zone mémoire de la taille correspondant au type estallouée. Chaque octet de cette zone est automatiquement initialisé avec la va-leur binaire 00000000. Notre variable aura donc une suite de 0 pour valeurbinaire.

Dans le cas d'une variable de type référence, le comportement est différent. Lazone mémoire allouée à notre variable contient une adresse mémoire à laquelleest stockée la donnée. On passe donc par un intermédiaire pour accéder ànotre donnée. L'adresse mémoire est initialisée avec une valeur spéciale qui nepointe sur rien, tandis que la zone mémoire contenant les données n'est pasinitialisée. Elle sera initialisée lorsque la variable sera instanciée. Dans le mêmetemps, l'adresse mémoire stockée dans notre variable sera mise à jour.

Une variable de type référence pourra donc ne contenir aucune donnée, tandisqu'une variable de type valeur aura forcément une valeur correspondant pardéfaut à une suite de 0 binaires.

Cette différence de fonctionnement a une conséquence importante : la copiede variable se fait par valeur ou par référence, ce qui signifie qu'une variable detype valeur sera effectivement copiée, tandis que pour un type référence, c'estl'adresse contenue par la variable qui sera copiée, et il sera donc possible d'agirsur la donnée réelle indifféremment à partir de chacune des variables pointantsur ladite donnée.

© E

dit

ions

EN

I -

All r

ights

rese

rved

114Les fondamentaux du langage

VB.NET et Visual Studio 2015

2.2.2 Types intégrés

Le framework .NET embarque plusieurs milliers de types différents utilisablespar les développeurs. Parmi ces types, nous en avons une quinzaine que l'onpeut considérer comme fondamentaux : ce sont les types intégrés (aussinommés types primitifs). Ce sont les types de base à partir desquels sontconstruits les autres types de la BCL ainsi que ceux que le développeur créedans son propre code. Ils permettent de définir des variables contenant desdonnées très simples.

Ces types ont comme particularité d'avoir chacun un alias intégré au langage.

Types numériques

Ces types permettent de définir des variables numériques entières ou déci-males. Ils couvrent des plages de valeurs différentes et ont chacun une préci-sion spécifique. Certains types seront donc plus adaptés pour les calculsentiers, d'autres pour les calculs dans lesquels la précision décimale est trèsimportante, comme les calculs financiers.

Les différents types numériques sont énumérés ci-dessous avec leurs alias ainsique les plages de valeurs qu'ils couvrent.

Type .NET Alias VB Plage de valeurs couverte Taille en mémoire

System.Byte Byte 0 à 255 1 octet

System.SByte SByte -128 à 127 1 octet

System.Int16 Short -32768 à 32767 2 octets

System.UInt16 UShort 0 à 65535 2 octets

System.Int32 Integer -2147483648 à 2147483647 4 octets

System.UInt32 UInteger 0 à 4294967295 4 octets

System.Int64 Long -9223372036854775808 à 9223372036854775807

8 octets

System.UInt64 ULong 0 à 18446744073709551615 8 octets

System.Single Single ±1,5e-45 à ±3,4e38 4 octets

115Les bases du langageChapitre 4

Les types numériques primitifs sont tous des types valeurs. Une variable detype numérique et non initialisée par le développeur aura pour valeur pardéfaut 0.

Remarque

.NET 4 a apporté le type System.Numerics.BigInteger afin de manipulerdes entiers d'une taille arbitraire. Ce type est aussi un type valeur, mais il ne faitpas partie des types intégrés.

Types textuels

Il existe dans la BCL deux types permettant de manipuler des caractèresUnicode et des chaînes de caractères Unicode : System.Char etSystem.String. Ces types ont respectivement pour alias VB.NET Char etString.

Le type Char est un type valeur encapsulant les mécanismes nécessaires autraitement d'un caractère Unicode. Par conséquent, une variable de type charest stockée en mémoire sur 2 octets.

Les valeurs de type Char doivent être encadrées par les caractères " " etsuffixées par le caractère c (qui les différencie ainsi des chaînes de caractères) :"a"c.

Le type String manipule en interne des tableaux d'objets de type Char pourpermettre le traitement de chaînes pouvant représenter jusqu'à 4 Go, soit2147483648 caractères. Contrairement aux types intégrés vus jusqu'ici, letype String est un type référence, ce qui signifie donc qu'une variable de cetype peut ne pas avoir de valeur.

Une chaîne de caractères s'écrit entre les caractères " " : "une chaîne decaractères sympathique et un peu longue".

System.Double Double ±5,0e-324 à ±1,7e308 8 octets

System.Decimal Decimal ±1,0e-28 à ±7,9e28 16 octets

Type .NET Alias VB Plage de valeurs couverte Taille en mémoire

© E

dit

ions

EN

I -

All r

ights

rese

rved

116Les fondamentaux du langage

VB.NET et Visual Studio 2015

Pour utiliser le caractère " dans une variable de type Char ou String sanscauser une erreur de compilation, il est nécessaire de le doubler : "le""deuxième"" mot est entre guillemets".

D'autres caractères doivent être représentés à l'aide de constantes VB.NETparticulières. Le tableau suivant résume les constantes qui peuvent être utili-sées.

Il est à noter que les chaînes de caractères sont invariables, c’est-à-dire qu'ellesne peuvent pas être modifiées. Heureusement, le framework nous permet dele faire mais à un certain prix. Chaque modification effectuée sur une chaînede caractères entraîne la création d'une nouvelle chaîne incluant la modifica-tion. Ce comportement, transparent pour nous, peut entraîner des problèmesde performance lorsqu'il est question de traitements importants sur ce typed'objets. Il est donc important de connaître cette subtilité afin d'éviter ce typede problèmes.

Type booléen

Une valeur booléenne représente un état vrai ou faux. Le type Boolean estessentiel au développement car c'est lui qui va permettre d'effectuer des véri-fications de conditions.

Constante VB.NET Caractère associé

vbBack Retour arrière

vbCr Retour chariot

vbLf Saut de ligne

vbCrLf Concaténation d'un retour chariot et d'un saut de ligne

vbNewLine ( = vbCrLf ) Concaténation d'un retour chariot et d'un saut de ligne

vbNullChar Caractère nul

vbNullString Chaîne de caractères nulle

vbTab Tabulation

vbVerticalTab Tabulation verticale