C# 12 et Visual Studio Code
Les fondamentaux du langage
Christophe Mommer
Éditions ENI
Avant-propos
Chapitre 1
Introduction
1. Qu'est-ce que C# ?9
1.1 Que peut-on réaliser avec C# ?10
1.2 Le langage est-il stable et pérenne ?12
2. Préparer son environnement13
2.1 Installation et configuration de Visual Studio Code14
2.2 Installer les outils de compilation17
3. Comment fonctionne le C# ?18
Chapitre 2
Premier programme
1. Créer sa première application C#23
2. Comprendre et écrire du code C#27
2.1 Notions de variable et constante29
2.1.1 Types numériques31
2.1.2 Types textuels34
2.1.3 Valeur booléenne38
2.1.4 Opérateurs38
2.2 Les autres types41
2.2.1 Stockage des dates41
2.2.2 Les intervalles de temps43
3. Analyser la structure d'un projet C#44
3.1 La notion de blocs45
3.2 Signification des blocs de code48
3.2.1 Le bloc d'espace de noms48
3.2.2 La définition d'une classe51
3.2.3 La définition d'une méthode52
3.3 Déclaration « top-level »52
4. Exécuter un programme C#53
4.1 Lancer le programme avec Visual Studio Code53
4.2 Lancer depuis la ligne de commande55
5. Exercice58
5.1 Énoncé58
5.2 Corrigé58
Chapitre 3
Programmation orientée objet
1. Principes de la programmation orientée objet61
1.1 Qu'est-ce qu'une classe ?61
1.1.1 Les classes dans Visual Studio Code63
1.1.2 L'héritage64
1.1.3 L'encapsulation65
1.2 Que peut-on déclarer dans une classe ?66
1.2.1 Les méthodes66
1.2.2 Déclarer une donnée69
1.3 Instancier une classe74
1.3.1 Le constructeur74
1.3.2 L'instanciation avec le mot-clé new78
1.4 Le polymorphisme80
2. Concepts avancés82
2.1 L'héritage avancé82
2.1.1 Méthodes virtuelles82
2.1.2 Classe abstraite83
2.1.3 Interface85
2.1.4 Implémentation par défaut dans une interface87
2.1.5 Masquage88
2.1.6 Interdire l'héritage89
2.2 Les différents types d'objets90
2.2.1 Les types références90
2.2.2 Les types valeurs91
2.2.3 Les types nullables94
2.2.4 Les types références nullables96
2.2.5 Les énumérations97
2.2.6 Les records100
2.3 Les modificateurs de classe103
2.3.1 La notion de static103
2.3.2 Static et interfaces105
2.3.3 La notion de classe partielle106
3. Exercice107
3.1 Énoncé107
3.2 Corrigé108
Chapitre 4
Algorithmique
1. Bases de l'algorithmique111
1.1 La logique conditionnelle111
1.1.1 Test simple : le if/else112
1.1.2 Multiples tests avec l'instruction switch118
1.1.3 Pattern matching120
1.1.4 Exercice - énoncé125
1.1.5 Exercice - corrigé125
1.2 Les collections126
1.2.1 L'interface IEnumerable126
1.2.2 Les tableaux127
1.2.3 La liste129
1.2.4 Les dictionnaires132
1.2.5 Les collections algorithmiques134
1.3 Les boucles136
1.3.1 Les généralités sur les boucles136
1.3.2 La boucle for137
1.3.3 La boucle while139
1.3.4 La boucle do while139
1.3.5 La boucle foreach140
1.3.6 Le mot-clé yield140
1.3.7 Exercice - énoncé141
1.3.8 Exercice - corrigé142
2. Gestion des erreurs144
2.1 Concept d'une exception145
2.2 Renvoyer une exception146
2.3 Gérer une exception148
2.3.1 Blocs try, catch et finally149
2.3.2 Filtre sur bloc catch151
2.4 Exceptions et performances153
Chapitre 5
LINQ
1. Fonctionnement de base155
2. Variables anonymes158
3. Principes des opérateurs LINQ158
3.1 Opérateurs de production162
3.2 Opérateurs de sélection174
3.3 Opérateurs de génération180
4. Expression de requête LINQ181
4.1 Le mot-clé into182
4.2 Le mot-clé let184
5. Exercice185
5.1 Énoncé185
5.2 Corrigé186
Chapitre 6
Sérialisation
1. Sérialisation en C#187
2. Sérialisation XML188
2.1 XmlSerializer189
2.2 XDocument, XElement et XAttribute193
3. Sérialisation JSON197
3.1 Utf8JsonReader et Utf8JsonWriter198
3.2 JsonDocument201
3.3 JsonSerializer202
4. Exercice208
4.1 Énoncé208
4.2 Corrigé209
Chapitre 7
Concepts avancés
1. Asynchronisme213
1.1 Fonctionnement de base213
1.2 Thread et asynchronisme215
1.3 Asynchronisme en C#216
1.4 Les mots-clés async et await218
1.5 Flux asynchrones221
2. Algorithmique avancée223
2.1 Programmation événementielle223
2.1.1 Les delegates223
2.1.2 Les events225
2.2 Les types génériques228
2.2.1 Utilisation standard228
2.2.2 Contraintes sur type générique230
2.3 Gestion de la mémoire231
2.3.1 Le destructeur232
2.3.2 IDisposable et IAsyncDisposable233
2.4 Paramètres de méthodes avancés235
2.4.1 Paramètre optionnel235
2.4.2 Mots-clés de paramètres235
2.4.3 Nommage de paramètres238
2.4.4 Paramètres variables239
2.5 Extension du fonctionnement d'un type240
2.5.1. Méthodes d'extension240
2.5.2 Définition des opérateurs241
2.6 Tuples et déconstruction245
2.6.1 Les tuples en C# 7245
2.6.2 Déconstruction de type248
2.7 Fonction locale250
Chapitre 8
Créer des applications
1. Application web253
1.1 Applications web graphiques253
1.1.1 ASP.NET MVC254
1.1.2 ASP.NET Razor Pages259
1.1.3 Blazor264
1.2 API269
2. Application de bureau275
2.1 WinForms275
2.2 Windows Presentation Foundation (WPF)281
2.3 Universal Windows Platform (UWP)285
3. Application mobile289
3.1 MAUI290
3.2 Code294
4. Conclusion296
Chapitre 9
Référence
1. Introduction297
2. Mots-clés de type297
3. Mots-clés de programmation orientée objet299
4. Mots-clés algorithmiques303
Index309