Langage C# - Les Bases



Documents pareils
Généralités sur le Langage Java et éléments syntaxiques.

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

ECLIPSE ET PDT (Php development tools)

< Atelier 1 /> Démarrer une application web

Java 7 Les fondamentaux du langage Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TP1 : Initiation à Java et Eclipse

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Microsoft Application Center Test

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Programmer en JAVA. par Tama

Sql Server 2005 Reporting Services

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Chapitre 2. Classes et objets

UE Programmation Impérative Licence 2ème Année

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Annexe : La Programmation Informatique

Plan du cours. Historique du langage Nouveautés de Java 7

Module.NET 3 Les Assemblys.NET

TD/TP 1 Introduction au SDK d Android

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Créer et partager des fichiers

Qlik Sense Desktop. Qlik Sense Copyright QlikTech International AB. Tous droits réservés.

Notions fondamentales du langage C# Version 1.0

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Gérer, stocker et partager vos photos grâce à Picasa. Janvier 2015

Table des matières. 1 À propos de ce manuel Icônes utilisées dans ce manuel Public visé Commentaires...

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

MEGA ITSM Accelerator. Guide de Démarrage

TP1. Outils Java Eléments de correction

DotNet. Plan. Les outils de développement

Eclipse atelier Java

SOMMAIRE 1 INTRODUCTION 4 2 GUIDE D UTILISATION ET TUTORIAUX VIDEOS EN LIGNE 4 3 CONTACTER VOTRE SUPPORT 4 4 RACCOURCIS CLAVIER 5

Module SMS pour Microsoft Outlook MD et Outlook MD Express. Guide d'aide. Guide d'aide du module SMS de Rogers Page 1 sur 40 Tous droits réservés

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Avant-propos FICHES PRATIQUES EXERCICES DE PRISE EN MAIN CAS PRATIQUES

Guide d'utilisation du Serveur USB

Héritage presque multiple en Java (1/2)

Objet du document. Version document : 1.00

Créer le schéma relationnel d une base de données ACCESS

v7.1 SP2 Guide des Nouveautés

HelpAndManual_unregistered_evaluation_copy GESTIONNAIRE D'ALARMES CENTRALISE OPTIM'ALARM. Manuel d'utilisation

MO-Call pour les Ordinateurs. Guide de l utilisateur

Sage CRM. 7.2 Guide de Portail Client

Reporting Services - Administration

SQL Server Installation Center et SQL Server Management Studio

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Edutab. gestion centralisée de tablettes Android

Corrigé de l'atelier pratique du module 6 : Transfert de données

Freeway 7. Nouvelles fonctionnalités

Publipostage avec Calc

Utilisation de l'outil «Open Office TEXTE»

Onglet sécurité de Windows XP Pro et XP Home

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

LANDPARK NETWORK IP LANDPARK NETWORK IP VOUS PERMET D'INVENTORIER FACILEMENT VOS POSTES EN RÉSEAU

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

l'ordinateur les bases

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

Guide utilisateur Archivage intermédiaire Messagerie. Enterprise Connect pour Outlook 2010 EC V 1.0

GUIDE Excel (version débutante) Version 2013

Manuel d utilisation NETexcom

Évaluation des compétences. Identification du contenu des évaluations. Septembre 2014

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Cours Access 1) INTRODUCTION AU SGBD...4 2) LES TABLES...4

Le langage C. Séance n 4

F O R M A T I O N S LOTUS NOTES. 8.5 Utilisateurs rue de la Bôle. E U R L. a u c a p i t a l d e

Guide pas à pas pour l'utilisation de la Console de gestion des stratégies de groupe

Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication

as Architecture des Systèmes d Information

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No2 :

Algorithmique et Programmation, IMA

Langage Java. Classe de première SI

Tune Sweeper Manuel de l'utilisateur

:...2 I.6. :... 2 I.7. :... 2 I.8. :...3 I.9. :... 3 I.10. :... 3 II. 4 II.1.

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

FICHIERS ET DOSSIERS

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

Programmation Objet - Cours II

EXCEL TUTORIEL 2012/2013

Premiers Pas en Programmation Objet : les Classes et les Objets

Créer une base de données


TeamViewer 7 Manuel Manager

Guide de déploiement

SAP Lumira Version du document : Guide de l'utilisateur de SAP Lumira

MANUEL WORDPRESS. Objectif: Refonte d un site web sous Wordpress I PRE-REQUIS: 1 / Créer un backup (sauvegarde) du site:

Traitement de texte : Quelques rappels de quelques notions de base

Google Drive, le cloud de Google

Stellar Phoenix Outlook PST Repair - Technical 5.0 Guide d'installation

1. Introduction Création d'une requête...2

Premiers pas sur e-lyco

Didacticiel de mise à jour Web

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence nominative)

Télécharger et Installer OpenOffice.org sous Windows

Module d introduction Comment réaliser vos propres cartes avec ArcGIS Online

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Transcription:

Langage C# - Les Bases 1

Table des matières Langage C# - Les Bases 1 Chapitre 1 : Visual Studio.NET 7 1. Introduction 7 2. Fonctionalités de Visual Studio.Net 7 2.1 L'éditeur de texte 7 2.2 L'éditeur graphique 7 2.3 Les fenêtres de support 7 2.4 Le débogueur intégré. 8 2.5 Le système d'aide intégré (MSDN). 8 2.6 L'accès à des logiciels externes. 8 2.7 Conclusion 8 3. Première approche de Visual Studio.net 9 3.1 Premier lancement de Visual Studio.Net 10 3.2. Création d'un nouveau projet 11 3.3. Les différents types de projet C# 12 3.4. Différencier les "Solutions" et les "Projets" 14 Notes pour les utilisateurs des versions précédentes de Visual Studio 14 4 Les différentes fenêtres de l'ide 15 4.1. Fenêtre "Explorateur de Solutions". 15 4.2. La fenêtre "Propriétés" 17 4.3. La fenêtre "Affichage de Classes" 18 4.4. La fenêtre "Dynamic Help" 20 4.5. La Boite à outils ou ToolBox 21 4.6. L'explorateur de Serveurs (Server Explorer). 22 4.7. Autres fenêtres de l'ide 23 4.7.1 La fenêtre "Task List" 23 4.7.2 La fenêtre "Command Window" 23 4.7.3 La fenêtre "Output" 24 4.7.4 La fenêtre "Autos" 24 4.7.5 La fenêtre "Locals" 24 4.7.6 La fenêtre "Call Stack" ou "pile des appels" 25 4.7.7 La fenêtre "BreakPoints" 25 5. Fenêtre "Explorateur d'objets" ou "Object Browser" 26 Chapitre 2 : Syntaxe du Langage C# 27 1. Considérations générales sur la syntaxe 27 1.1 Espaces blancs 27 1.2 Instructions 27 1.3 Structuration par Blocs 27 1.4 Indentation du code 28 1.5 Commentaires 29 Commentaires simple ligne : // 29 Commentaires multi-lignes : /* */ 29 Commentaires de documentation XML : /// 29 1.5 Sensiblité à la Casse 31 2. Notre premier programme : HelloWorld.cs 32 3. Les Variables dans C# 33 3.1 Concept de variable 33 3.2 Représentation en mémoire 34 2

Base 10 34 Notation Binaire 34 Types numériques signés et non-signés 35 Chaînes de caractères (Strings) 35 3.3 Déclaration de variables 37 3.4 Initialisation de variables 38 3.5 Nommage des variables 39 3.6 Portée des variables 40 Exemple 40 Différences entre champs et variables locales 41 3.7 Constantes 42 4 Les types de données dans C# 43 4.1 Types "Valeur" et Types "Référence" 43 Exemple d'affectation à un type valeur 43 Exemple d'affectation à un type Référence 43 Conclusion 44 4.2 Types du Common Type System 46 4.3 Types Valeur prédéfinis 46 Types d'entiers 46 Types de nombres en virgule flottante 47 Type Decimal 47 Type bool (Booléen) 48 Type Char (caractère) 48 4.4 Types Référence prédéfinis 49 Type object 49 Type string 50 5. opérateurs et expressions 52 5.1 Différents types d'opérateurs 52 5.2 Opérateurs et raccourcis 53 5.3 L'operateur ternaire 54 5.4 Opérateurs checked et unchecked 54 5.5 Opérateur sizeof 55 5.6 Opérateur typeof 55 5.7 Préséance des opérateurs 55 5.8 Sécurité et Types 56 6. Conversions de types de données 56 6.1 Conversions implicites 56 6.2 Conversions explicites 58 6.3 Boxing et un-boxing 60 7. Contrôle du Flux d'exécution 61 7.1 Les Instruction Conditionnelles 61 L'instruction if 61 L'instruction switch 63 7.2 Les Boucles 65 La boucle for 65 La boucle while 67 La boucle do while 67 La boucle foreach 68 7.3 Instruction de saut 69 L'instruction goto 69 L'instruction break 69 L'instruction continue 69 L'instruction return 69 3

3. Chapitre 3 : Structure des programmes 70 3.1 Les Tableaux en C# 70 3.1.1 Définition 70 3.1.2 Les tableaux à une dimension 70 Initialisation 70 Accès aux éléments du tableau 71 3.1.3 Les tableaux à plusieurs dimensions 71 3.1.4 Les tableaux orthogonaux (jagged arrays) 72 Déclaration 72 Initialisation 72 Parcours des tableaux de tableaux 73 3.1.5 La classe Array et ses méthodes. 74 Propriétés de System.Array Class 74 Méthodes de System.Array Class. 74 3.2. Les Enumérations 75 3.2.1 Définition et usage 75 3.2.2 Typage sous-jacent des énumérations 75 3.2.3 Méthodes de la classe Enum 76 3.3 Les espaces de noms (namespaces) 76 3.3.1 importance des espaces de nom 76 3.3.2 Conventions pour namespaces et répertoires 77 3.3.3 Instruction using 78 3.3.4 Liste des principaux namespaces 78 3.4 Classes et Structures 79 3.4.2 Définir des classes et des structures 79 Structures 79 Classes 80 3.4.3 Différence entre une classe et un objet. 80 3.5 Méthodes dans C# 81 3.5.1 Déclaration de méthodes 81 3.5.2 valeurs de retour 81 3.5.3 Invocation de méthodes 81 3.5.4 La méthode Main et ses différentes syntaxes 81 3.5.5 Passage d'arguments à Main 82 3.5.6 Passage d'arguments par valeur et par référence 83 Mot-clé ref 83 Mot-clé Out 83 3.5.7 Passage de tableaux aux méthodes 83 Mot-clé Params 84 3.5.8 Surcharger des méthodes. 84 3.5.9 Membres statiques et Membres d'instance 85 3.6 Propriétés 86 3.6.1 Concept d'encapsulation 86 3.6.2 Syntaxe des propriétés 87 3.6.3 Considérations générales 88 Lecture / écriture 88 Accès différents 88 3.6.4 Indexeurs 88 3.7 Delegates et Evènements 89 3.7.1 Définition d'un Delegate 89 3.7.2 Exemple d'utilisation d'un delegate simple 89 3.7.2 Delegates Multicast 90 3.7.1 Evènements 91 4

Etape 1: Déclarer le delegate. 92 Etape 2: Définir la classe Generateur 92 Etape 3: Définir la classe Client 93 Etape 4: Souscrire à l'évènement et le traiter 93 4. Chapitre 4 : Déboguage et gestion d erreurs 94 1. Introduction 94 2. Déboguage dans Visual Studio.net 94 2.1 Déboguage en mode «normal» 95 2.2 Afficher des informations de déboguage utiles 95 2.3 Déboguage en mode point d arrêt ou pas à pas 96 2.3.1 Entrer en mode Point d arrêt 96 2.3.2 Définir des point d arrêt dans le code 97 2.3.3 Autres moyens d activer le mode arrêt 99 3. Contrôler le contenu des variables 100 3.1 La fenêtre «Variables locales» 100 3.2 La fenêtre «Recherche» 100 3.3 Différents mode de pas à pas 101 3.4 La fenêtre «Command» 101 3.5 La fenêtre «Pile des appels» 102 4. Gestion des Erreurs 103 4.1 Les exceptions 103 4.2 La structure «try..catch..finally» 103 4.3 Lister et configurer des exceptions 105 4.5 La Fenêtre Exceptions 105 Chapitre 5 - Concepts Orientés Objet 106 5.1 Constructeurs 106 5.1.1 Par défaut 106 5.1.2 Paramétrés 106 5.1.3 Statiques 106 5.1.4 Appeler d'autres constructeurs depuis un constructeur. 107 5.1.5 Appeler des constructeurs de la classe de base 107 5.2 Destructeurs 109 5.2.1 Syntaxe 109 5.2.2 Notion de Garbage Collector et Finalisation non-déterministe 109 5.2.3 Interface IDisposable et Méthode Dispose. 110 5.6 Héritage 111 5.6.1 Héritage de classes 111 5.6.2 le mot-clé this 111 5.6.3 le mot-clé base 111 5.6.4 Redéfinition de méthodes 113 5.6.4 Masquage de méthodes 114 5.7 Interfaces 114 5.7.2 Implémentation d'interfaces 115 5.7.2 Polymorphisme par les interfaces 115 5.7.3 Héritage d'interfaces 117 5.7 Classes 118 5.7.1 Classes abstraites 118 5.7.2 Classes sealed 119 5.7.3 Niveau d'accessibilité des classes et des membres. 119 Annexe 1 Conventions de codage en C#. 121 1. Introduction 121 2. Conventions de nommage 121 3. Casse des noms d'éléments (Pascal Casing et Camel Casing) 122 5

4. Style des Noms d'éléments. 123 5. Nommage des Namespaces (espaces de noms). 123 Annexe 2 : Caractères d'échappement 124 Annexe 3 Noms et Mots-Clés 125 1. Liste des mots-clés Visual Basic.NET 125 2. Liste des mots-clés C# 127 6

Chapitre 1 : Visual Studio.NET 1. Introduction Visual Studio.Net est l environnement de développement intégré de Microsoft. Il a été conçu pour rendre aussi faciles que possible l écriture, le déboguage et la compilation de vos programmes. 2. Fonctionalités de Visual Studio.Net En pratique, cela signifie que Visual Studio.Net est une application extrêmement sophistiquée, présentant une interface multi-documents, et dans laquelle vous pourrez effectuer toutes les opérations nécessaires au développement de votre code. Concrètement, l application VS.NET comporte : 2.1 L'éditeur de texte Dans l'éditeur de texte, vous pouvez écrire votre code, quel que soit le langage que vous utilisez. Tous les langages écrits pour supporter la plateforme.net sont pris en compte. Cela inclut C#, Visual Basic.Net, C++.Net, ainsi que tous les autres langages d éditeurs tiers (tel Eiffel.Net, Python.Net, etc..). Cet éditeur profite des derniers développements en matière d'interface utilisateur et supporte la nouvelle version de la technologie IntelliSense qui apporte aux développeurs plus de souplesse et de rapidité dans l'écriture de leur code. 2.2 L'éditeur graphique L'éditeur graphique (ou désigner) permet d'élaborer de manière visuelle une interface utilisateur, que celle-ci soit une interface Windows ou une interface Web. Lorsque vous utilisez ce "designer", Visual Studio.Net traduit automatiquement l'interface graphique les diverses actions réalisées par les développeurs pour créer l'interface graphique en code C# (ou n'importe quel autre langage.net). Les utilisateurs de RAD (comme Visual Basic 6 par exemple) sont déjà habitués à pouvoir créer graphiquement leurs interfaces, mais, auparavant, le code généré était caché aux développeurs, ce qui induisait certaines limitations. Ce n'est plus le cas dans le designer graphique de Visual Studio.Net : toutes les opérations réalisées en mode "graphique" par les développeurs sont désormais traduites en code. 2.3 Les fenêtres de support Cellecs-ci permettent de visualiser et de modifier certains aspects de votre projet. Il existe ainsi des fenêtres pour accéder aux propriétés des objets, des fenêtres permettant l'accès à l'aide, des fenêtres permettant la visualisation des valeurs des variables, etc. Nous étudierons certaines de ces fenêtre plus loin dans ce chapitre. 7

2.4 Le débogueur intégré. Il arrive souvent que l'on fasse des erreurs lors d'un processus de développement. Visual Studio.Net comporte donc un débogueur qui vous informe de la nature de ces erreurs, et permet de les identifier plus facilement. Il peut même analyser en temps réel la syntaxe du code que vous êtes en train de taper afin de vous aider à localiser ces erreurs. 2.5 Le système d'aide intégré (MSDN). Le système d'aide de Microsoft, nommé "MSDN" (pour Microsoft Developper Network) est étroitement intégré au fonctionnement de Visual Studio.Net. Ce système d'aide fait partie du package Visual Studio et peut être consulté en tant que tel, mais peut également être consulté au sein même de l'environnement de développement Visual Studio. Visua Studio peut bien sûr appeler la documentation MSDN de façon contextuelle. Par exemple, si vous hésitez sur la signification d'un mot-clé, vous pouvez le sélectionner dans le code, taper sur la touche F1 et Visual Studio.Net affichera la page appropriée dans la documentation MSDN. De nombreuses options sont disponibles permettant à chaque développeur d'appliquer ses préférences personnelles en ce qui concerne le degré d'intégration de MSDN dans Visual Studio.Net. 2.6 L'accès à des logiciels externes. Visual Studio.Net est un outil très ouvert et, par conséquent, permet aux développeurs de personnaliser leur environnement de développement. Parmi les options disponibles, on trouve la possibilité d'exécuter depuis Visual Studio.net des programmes divers paramétrables par les utilisateurs, tout cela sans quitter l'environnement de développement. On peut même naviguer sur le Web au sein de Visual Studio! 2.7 Conclusion Comme vous le constatez, Visual Studio.Net est plus qu'un simple éditeur de texte. Il est l'outil le plus pratique pour créer des applications.net. Cependant, cet outil n'est pas obligatoirement nécessaire pour créer des applications.net : un simple éditeur de texte (comme NotePad) pourrait suffire.. Evidemment, NotePad n'offre pas la même souplesse que Visual Studio.net mais, Microsoft ayant inclus les différents compilateurs dans le Framework SDK (téléchargeable gratuitement sur http://msdn.microsoft.com), il est tout à fait possible de ne pas utiliser Visual Studio pour coder des logiciels.net. Par ailleurs, d'autres éditeurs très professionnels sont téléchargeables sur Internet comme par exemple SharpDevelop et WebMatrix (en source libre) ou encore DreamWeaver MX (édité par MacroMedia). SharpDevelop : http://www.icsharpcode.net/opensource/sd/download/ WebMatrix : http://www.asp.net/webmatrix/download.aspx?tabindex=0&tabid=1 DreamWeaverMX: http://www.macromedia.com/software/dreamweaver/download/ 8

3. Première approche de Visual Studio.net Dans cette section nous présenterons les différentes fonctionnalités de L'IDE Visual Studio.net et les différents types de projets que nous pouvons créer en langage C#. Ce chapitre n'a pas pour but de présenter de manière exhaustive toutes les fonctionnalités de l'ide car il faudrait pour cela un livre entier! En effet, cet environnement de développment est si complet qu'il est sans doute plus facile de découvrir ses fonctionnalités avancées au fur et à mesure que nous en aurons l'utilité dans le code. Le très grand nombre de fonctionnalités dans Visual Studio.net tient également au fait que cet IDE permet, outre le développement d'un grand nombre de projets différents, d'utiliser tous les langages implémentant le Framework.net et tout cela dans le même logiciel. De plus, Visual Studio.net peut également servir d'interface pour interagir avec des bases de données ou des services Windows, en présentant une interface graphique adaptée à chacune de ces tâches. Commençons par découvrir ensemble les fonctionnalités "de tous les jours" de Visual Studio.net. 9

3.1 Premier lancement de Visual Studio.Net Voici la page d'accueuil de VS.NET telle que vous la verrez lors du premier lancement après l'installation : Cette page est appelée la "page d'accueuil" de Visual Studio.Net. C'est une page HTML qui présente plusieurs onglets : Projects : présente la liste des projets récemment utilisés ou permet la création d'un nouveau projet. Online Resources: cette page vous présente différents liens utiles vers la communauté de développeurs et d'éditeurs travaillant avec la plateforme.net. Par exemple, on peut directement faire des recherches sur MSDN version Web, télécharger des exemples de code, rechercher des services Web effectuant une tâche particulière, etc.. C'est un peu une porte sur le monde de.net. De plus, cette page est configurable et il est possible d'y ajouter ses propres éléments ou services Web. My Profile : Cet onglet vous permet de définir certaines options pour l'environnement de développement Visual Studio, telles que la configuration du clavier (par exemple les anciens développeurs VB peuvent avoir exactement les mêmes raccourcis clavier que dans les version 10

précédentes de Visual Studio), l'agencement des fenêtres, le filtre pour l'aide (par exemple pour n'afficher que l'aide concernant un langage particulier et pas les autres), et enfin si vous souhaitez utiliser l'aide MSDN dans une fenêtre intégrée à Visual Studio ou si vous préférez utiliser celle-ci en tant que logiciel tournant indépendamment de Visual Studio. 3.2. Création d'un nouveau projet Vous pouvez créer un nouveau projet soit en cliquant sur le lien approprié sur la page d'accueuil de Visual Studio, soit en allant dans le menu "Fichier\Nouveau\Projet". Dans les deux cas, la boite de dialogue "Nouveau Projet" s'affiche et vous permet de définir les options et le type du nouveau projet à créer. Voici comment se présente cette boite de dialogue : Comme on peut le voir, il existe de nombreux types de projets différents disponibles pour le langage C#. Nous allons expliquer la nature de certains d'entre eux prochainement. On constate que cette boite de dialogue nous permet également de définir le répertoire utilisé pour stocker le projet, ainsi que le nom du projet à créer. La case à cocher "Créer un répertoire pour la solution" introduit le concept de "solution", qui est une notion différente de celle du projet. Nous étudierons les différences entre un projet et une solution dans ce chapitre. 11

3.3. Les différents types de projet C# Note : Le but de ce suppor t n'est pas de décrire exhaustivement tous les types de projets pour tous les types de langages. Pour information, en ce qui concerne C++, tous les anciens types de projets sont disponibles (applications MFC, projets ATL, etc..). En ce qui concerne Visual Basic.NET il existe des innovations (avec de nouveaux types de projets comme par exemple "Application Console"). En ce qui concerne C#, nous nous bornerons ici à décrire les types de projets principaux que nous pouvons créer sous C#. Il existe cependant d'autres types de projets C# plus spécialisés sous l'option "Other Projects" ou "Autres projets". C# permet donc la création de nombreux types de projet. Le type d'un projet permet de définir le type d'application qui va résulter de la compilation et du déploiement de ce projet. Application Windows Type de Projet sélectionné Obtention du Code C# et des options de compilation pour générer Un projet contenant un formulaire de base vide répondant aux évènements. Ce type de projet sert à créer des applications avec des interfaces client sous Windows (des EXE) Bibliothèque de Classes Un projet compilable sous la forme de DLL contenant une ou plusieurs classes réutilisable(s) par un autre programme.net Bibliothèque de contrôles Windows Un projet contenant une classe.net possédant une interface utiilisateur et réutilisable par un autre programme.net (comme un contrôle ActiveX dans les versions précédentes de VS. Application Web ASP.NET Un projet contenant une WebForm (page ASP.NET) et permettant de créer une application avec une interface Web. Les pages ASP.NET générant automatiquement le code HTML visualisé dans l'explorateur Internet. Service Web ASP.NET Un projet contenant une classe agissant comme un service Web. Un service Web est une application qui tourne sur un serveur Web et dont un autre programme peut se servir. Bibliothèque de contrôles Web Un projet contenant un contrôle réutilisable et pouvant être appelé depuis une page ASP.NET et qui générera le code HTML nécessaire à son affichage dans un explorateur Internet Type de Projet sélectionné Obtention du Code C# et des options de 12

Application Console compilation pour générer Un projet contenant une classe.net et les options de compilation nécessaire à la création d'un projet qui s'exécutera dans une fenêtre de commande DOS. Service Windows Un projet destiné à générer une application de type "service". Un service est une application en général sans interface graphique et tournant en arrière-plan de Windows (NT, XP, 2000 ou plus). Projet Vide Un projet vide. Lors de la création d'un tel projet, vous devrez écrire tout le code en partant de rien. Vous continuerez cependant à bénéficier de toutes les facilités et outils de Visual Studio.Net lors de l'écriture du code. Projet Web Vide Un projet vide mais avec des paramètres de compilation définis pour annoncer au compilateur de générer du code pour des pages ASP.Net Nouveau Projet dans un dossier existant Des fichiers d'un nouveau projet pour un projet vide. Utilisez cette option si vous disposez de fichiers de code source C# (saisis par exemple dans un éditeur de texte) et que vous souhaitez les intégrer dans un projet Visual Studio.Net 13

3.4. Différencier les "Solutions" et les "Projets" Nous avons déjà évoqué précédemment dans ce chapitre les termes "solution" et "projet". Ces deux notions sont différentes et il est important de bien comprendre la différence entre les deux.. Un projet est l'ensemble de tous les fichiers de code source et des fichiers de ressources compilables dans un seul assemblage (ou programme). Par exemple, un projet peut être une bibliothèque de classe ou une application avec interface utilisateur Windows, ou encore une application s'exécutant dans une fenêtre DOS (application "Console"). Une Solution est constituée de l'ensemble de tous les projets faisant partie d'un ensemble logiciel particulier destiné à créer une application. Pour mieux comprendre cette différence, rappelons-nous que, lors de la livraison d'une application, cette dernière est vraisemblablement composée du plus d'un assemblage. Par exemple, cette application pourrait contenir une interface utilisateur, quelques contrôles personnalisés et d'autres composants livrés comme des bibliothèques de composants d'application. On pourrait dans certains cas y ajouter encore d'autre éléments, comme par exemple une interface utilisateur spécifique réservée aux administrateurs. Chacune de ces parties pourrait être contenue dans un assemblage séparé, pour des raisons évidentes de réutilisation et de modularité du code. Toutes ces parties, prises séparément, sont chacune considérées comme un projet individuel par Visua Studio. Toutefois, il est plausible que vous dévelopiez tous ces projet en parralèle, les uns interagissant avec les autres. Il serait donc très utile de conserver la possibilité de les éditer comme ensemble unitaire au sein de votre environnement de développement. Visual Studio.Net le permet en considérant que tous les projets font partie d'une seule solution et traite cette solution comme une seule unité qu'il lit et stocke en mémoire et dans laquelle il permet de travailler. C'est pourquoi le comportement par défaut de Visual Studio.net est de créer une solution pour tout nouveau projet que vous créez. Si vous souhaitez ne travailler que sur un seul projet, le fait que celui-ci soit contenu dans une solution sera transparent. Par contre, si par la suite vous voulez intégrer votre projet avec d'autres, il vous suffira d'ajouter les autres projets à la solution pour permettre, par exemple, la compilation de tous les projets contenus dans la solution d'un seul coup. Notes pour les utilisateurs des versions précédentes de Visual Studio Pour les développeurs C++, une solution Visual Studio.NET correspond à un ancien "espace de travail" de projet Visual C++ 6 (stocké dans un fichier.dsw) et un projet Visual Studio.NET correspond à un ancien projet C++ (fichiers.dsp). Pour les développeurs en VB (version 4,5 ou 6), une solution correspond à l'ancienne notion de groupe de projet (fichiers.vbg) et un projet.net rappelle l'ancien projet VB (fichier.vbp) 14

4 Les différentes fenêtres de l'ide Dans cette section, nous allons détailler les différentes fenêtres les plus utilisées dans l'ide (Integrated Development Environment). Le but n'est pas un passage en revue exhaustif de toutes les fenêtres disponibles mais de donner un aperçu des fenêtre que l'on utilise couramment. 4.1. Fenêtre "Explorateur de Solutions". Voici une image de la fenêtre "explorateur de solution" : Cette fenêtre permet de visualiser les divers fichiers composant les projets ou solutions actuellement ouverts dans Visual Studio.Net. On voit la relation hiérarchique symbolisée par les différents niveaux dans l'arbre contenant tous les éléments avec, en haut la solution contenant le ou les projets qui la constitue. On voit en dessous le projet ("CsharpN1 Arrays") et en dessous, les divers élements du projet, comme suit : la boite de dialogue "Références" qui, une fois déroulée montrent l'ensemble des assemblages référencés par ce projet Les fichiers constituant le projet (avec deux fichiers de code C# avec une extension.cs, une icône qui deviendra celle de l'application, et un fichier texte associé au projet). 15

Lorsque l'on souhaite faire afficher dans la fenêtre concepteur (graphique ou de code) un élément en particulier, il suffit de double-cliquer sur son icône ou son nom dans l'explorateur de projets et le contenu dudit fichier est affiché. NB : Pour renommer un élément, il est toujours conseillé d'utiliser cette fenêtre plutot que de passer par l'explorateur Windows. En effet, si l'on renomme un élément en dehors de Visual Studio, la modification de nom n'est pas répercutée dans Visual Studio, ce qui conduit l'ide à ne plus retrouver le fichier renommé. Dans cet exemple, la solution affiichée ne contient qu'un seul projet mais, dans un processus de développement réel, il n'est pas rare d'avoir plusieurs projets ouverts dans une même solution. 16

4.2. La fenêtre "Propriétés" Voici une autre fenêtre que les développeurs ayant utilisé les versions précédentes de Visual Basic reconnaîtront certainement. Nous avons déjà évoqué le fait que les classes pouvaient contenir des propriétés. Nous verrons en détail comment implémenter des propriétés pour une classe donnée dans les chapitres suivants. Voici comment se présente la fenêtre propriétés : Cette fenêtre est faite pour nous permettre d'interagir avec les propriétés d'un objet donné. Une fois un objet sélectionné (si celui-ci posséde des propriétés bien sûr), les noms et les valeurs de chacune des propriétés de cet objet s'affichent dans la fenêtre propriétés. On voit au sommet de cette fenêtre, une liste déroulante contenant la liste de tous les objets dont les propriétés peuvent être affichées par cette fenêtre. Dans cet exemple, on constate que l'objet dont les propriétés sont actuellement affichées s'appelle Form1 et est de type System.Windows.Forms.Form. 17

On peut bien sûr interagir avec les valeurs des propriétés via cette fenêtre. Toutes les modifications de propriétés que nous effectuons via cette fenêtre donneront lieu à des modifications dans le code source de l'élement affiché. Il est donc préférable d'utiliser la fenêtre propriétés quand cela est possible car cela nous évite d'écrire du code et c'est beaucoup plus facile! La zone de l'image qui affiche le texte "Misc" est la zone de description qui, une fois une propriété sélectionnée, affiche une description succinte de l'usage de la propriété (pour avoir des informations détaillées, l'aide MSDN est bien sûr plus complète). 4.3. La fenêtre "Affichage de Classes" Contrairement à la fenêtre propriétés, la fenêtre "affichage de classes" (ou ClassView) trouve son origine dans les environnements de développement C++ et Java. Voici comment se présente cette fenêtre : Comme on peut le constater, la fenêtre "affichage de classes" n'est pas à proprement parler une fenêtre indépendante, mais se présente comme un onglet supplémentaire de l'explorateur de solutions. Elle affiche une vue en arborescence que vous pouvez dérouler pour visualiser exhaustivement les éléments composant votre solution. Dans cet exemple, on voit que la solution ne contient qu'une seule classe nommée ClassTestArrays, située dans le namespace Demos.CsharpN1.Arrays. On voit en dessous du nœud de la classe, la liste des membres de la classes, en l'occurrence, la liste des méthodes que cette classe propose, comme par exemple la méthode Main(String[]), la méthode printvalues(int[]), etc.. Cette vue hiérarchique de tous les éléments de code composant une solution est extrèmement pratique, tant pour la vision globale qu'elle offre, mais également pour atteindre rapidement un élément dans le code. Il 18

suffit en effet de double-cliquer sur un élément pour que l'éditeur de code se positionne immédiatement sur celui-ci. On utilisera donc très souvent cette fenêtre pour se déplacer dans le code, ainsi que pour garder une vision globale claire de tous les élémements (classes, méthodes, propriétés, etc..) composant une solution. Icônes du ClassView Vous constaterez que chacun des éléments affichés dans cette fenêtre possède une ou deux icône particulières. Il y a des icônes pour tous les types d'élements que vous pouvez rencontrer dans C#, et également, une icône indiquant l'accessibilité (private, public, protected, etc..) du membre que vous êtes en train de visualiser. Une référence complète des icônes et de leur signification est disponible sur le Web. 19

4.4. La fenêtre "Dynamic Help" Voici comment se présente la fenêtre "Dynamic Help" Cette fenêtre permet d'accéder à l'aide MSDN (Microsoft Developer Network) fournie avec Visual Studio. Elle s'appelle "Dynamic Help" car elle son contenu évolue dynamiquement en fonction du contexte dans lequel on se trouve. Par exemple, le contenu de cette fenêtre évolue selon le mot-clé qui se trouve sous le curseur lorsque l'on est dans la fenêtre de code, ou encore selon l'objet actuellement sélectionné dans l'ide, par exemple un bouton ou un autre contrôle situé sur une feuille. NB: cette fenêtre est pratique mais le fait de la garder affichée ralentit le fonctionnement de la technologie d'auto-complétion du code avec IntelliSense. 20

4.5. La Boite à outils ou ToolBox La Toolbox est une fenêtre qui vous permet d'ajouter différents types d'éléments dans vos projets. Cette fenêtre n'est pas toujours utile dans tous les types de projets (par exemple, on s'en sert rarement dans un projet de type "Console Application". Elle est principalement utillisée pour aider les développeurs à composer l'interface graphique des applications qui peuvent en posséder une (Application WinForms ou WebForms par exemple), en leur présentant une liste des divers éléments ajoutables dans l'interface sous forme d'icônes.. C'est par exemple via cette fenêtre que l'on pourra ajouter des boutons et autres éléments aux designer graphique pour les Windows Forms.. Voici une représentation de la fenêtre ToolBox telle qu'elle se présente dans une application Windows Forms : On remarque que les différents types de contrôles ou d'éléments sont regroupés thématiquement dans les différents onglets au sommet de la fenêtre ("My User Controls", "Data", "Components", "Windows Forms", etc..). Cette fenêtre a également d'autres fonctionnalités (comme le "Clipboard Ring") qui seront détaillées au fur et à mesure de ce cours. 21

4.6. L'explorateur de Serveurs (Server Explorer). La fenêtre "Explorateur de Serveurs" permet de contrôler et d'accéder à certain services tournant sur la machine directement depuis l'environnement de développement Visual Studio. Il est par exemple possible d'administrer/consulter les Logs de la machine, les services tournant sur la machine, les compteurs de performances, les MessageQueue, ainsi que d'accéder à une ou plusieurs instances SQL Server déclarées sur la machine. Le fait de pouvoir interagir directement depuis l'ide avec le serveur de bases de données est une pratique courante et extrêmement pratique. Voici une vue de la fenêtre "Explorateur de Serveurs" : Dans ce graphique, nous pouvons voir les différents types de services disponibles (la liste n'est pas exhaustive et peut varier en fonction des services installés sur la machine) sur une machine nommée "nemesis". On voit que l'on peut explorer la structure d'une base de données (ici, la base de données exemple de Microsoft nommée "Northwind") et consulter ou modifier des données dans les tables, créer ou modifier des procédures stockées, etc.. 22

4.7. Autres fenêtres de l'ide L'IDE Visual Studio.net possède un grand nombre de fenêtres dédiées à différentes tâches et il n'est pas possible de toutes les énumérer ici. Nous en étudierons certaines fréquemment lors de nos développement et d'autres seront moins fréquemment utilisées, tout cela dépend du type de développement que vous effectuerez. Parmi les fenêtres très couramment utilisées on peut citer : 4.7.1 La fenêtre "Task List" Cette fenêtre affiche le résultat de la compilation, recense la liste des erreurs et avertissements, et qui vous permet également d'ajouter des tâches de développement que vous devez vous rappeler de faire (un peu comme le gestionnaire de tâches d'outlook). Voici par exemple un apercu de la fenêtre "Task List" nous présentant la liste des tâches à effectuer (en général, ce sont des erreurs ou des avertissements à corriger): Ici, on voit clairement la nature de chaque tâche et dans quel fichier et à quelle numéro de ligne effectuer celle-ci. 4.7.2 La fenêtre "Command Window" Celle-ci possède deux modes pour deux utilisations distinctes. En mode Command, elle permet d'appeler des commandes standards de l'ide de manière rapide (comme par exemple ajouter une classe ou fermer un projet), et en mode "Immed" (pour "Immédiat"), elle permet d'afficher la valeur de certaines variables ou expressions lors d'une exécution en pas-à-pas 23

4.7.3 La fenêtre "Output" Cette fenêtre affiche des indications sur les évènements qui se sont produits durant l'exécution de ou des assembly qui sont chargés. Il existe d'autres fenêtres (dont nous utiliserons la plupart), dont celles dédiées au déboguage des applications et que l'on n'utilise qu'en mode pas-à-pas : 4.7.4 La fenêtre "Autos" Cette fenêtre affiche la valeur des variables contenues dans la ligne en cours d'exécution et dans la ligne qui suit. A noter qu'en Visual Basic.net, cette fenêtre affiche les valeurs pour la ligne en cours et pour les trois lignes au dessus et en dessous de la ligne en cours). On peut également via cette fenêtre modifier directement la valeur des variables affichées lors du pas-à-pas. 4.7.5 La fenêtre "Locals" Cette fenêtre permet d'afficher les valeurs de toutes les variables et éléments qui sont dans la portée en cours. On peut également modifier les valeurs de ces éléments directement via cette fenêtre durant une exécution en pas-à-pas. 24

4.7.6 La fenêtre "Call Stack" ou "pile des appels" Cette fenêtre affiche la pile des appels de procédure et nous permet de naviguer dans le code dans à travers les différents niveaux d'appels de procédures. 4.7.7 La fenêtre "BreakPoints" Cette fneêtre affiche la liste des points d'arrêts définis dans le code avec leurs numéros de ligne, les classes et les fonctions dans lesquels ils sont définis, ainsi que les différentes conditions qui régissent leur activation, comme par exemple la condition de déclenchement et le nombre de passages obligatoires avant le déclenchement de chacun d'entre eux. 25

5. Fenêtre "Explorateur d'objets" ou "Object Browser" La fenêtre "Explorateur d'objets" vous permet d'examiner et de découvrir les éléments (espaces de noms, classes, structures, interfaces, énumérations, etc..) et leurs membres (méthodes, propriétés, évènements, etc..) de tous les composants existant dans ou étant référencés par l'assemblage en cours. C'est une fenêtre pratique pour avoir une vue d'ensemble des élements d'un assemblage ou espace de nommage particulier. La possibilite de trier les éléments par type, par nom ou encore par accès (public, private, etc..) permet de naviguer facilement et de trouver rapidement l'information que l'on souhaite. Une fonction de recherche est également fournie qui est très pratique pour accéder rapidement à un membre donné. Voici une vue possible de l'explorateur d'objets : Note : Il existe cependant un outil d'un éditeur tiers qui remplit toutes les fonctions de l'explorateur de projets avec une interface plus conviviale et qui présente des fonctionnalités plus complètes. Ce logiciel se nomme.net Reflector et est utilisé largement dans la communauté.net. Il est téléchargeable ici : http://www.aisto.com/roeder/dotnet En plus d'offrir de meilleures fonctionnalités (et d'être plus convivial) que l'explorateur d'objet natif de Visual Studio,.net Reflector (appelé ainsi à cause de la technologie de réflexion qui permet à du code d'inspecter les méta-attributs d'un élément), propose un desassembleur en code IL, ainsi qu'un décompilateur en Visual Basic ou en C#! Cet outil gratuit est l'un des outils indispensables de tout développeur C# et une visite régulière sur le site de son auteur Lutz Roeder vous permettra de profiter des lumières de l'un des pionniers du développement.net. 26

Chapitre 2 : Syntaxe du Langage C# 1. Considérations générales sur la syntaxe La structure et le fonctionnement du code C# sont en grande partie similaires à ceux de C++ et de Java. Au premier abord, la syntaxe de C# peut paraître confuse et moins intuitive que celles de certains langages utilisant plus de mots anglais intelligibles (comme par exemple Visual Basic 6 ou VB.NET). Cependant, après une immersion dans le langage C#, vous constaterez que sa syntaxe stricte et très concise permet l'écriture d'un code extrêmement clair et facilement maintenable. 1.1 Espaces blancs A la différence des compilateurs des autres langages, le compilateur C# ne tient pas compte des espaces supplémentaires figurant dans le code, que ceux-ci soient des caractères Espace, Tabulation ou Retour chariot (caractères communément appelés espaces blancs). Ceci signifie que vous avez une totale liberté pour formater votre code comme vous le souhaitez, bien que certaines règles communément admises augmentent la lisibilité du code. Certaines conventions de codage sont présentées en annexe de ce support et vous présentent les options de formatage du code les plus courantes. 1.2 Instructions Le code C# est composé d'instructions. Chacune de ces instructions doit se terminer par un caractère "point-virgule", indiquant la fin de l'instruction. Une même ligne peut donc théoriquement comporter plusieurs instructions, cependant, il est d'usage de commencer une nouvelle ligne après chaque point-virgule de fin d'instruction Par contre, il est tout à fait courant que des instructions très longues et qui dépasseraient la largeur d'une page écran soit réparties sur plusieurs lignes. Par convention, on essaye de ne pas écrire de lignes de code dont la largeur est supérieure à celle d'un écran imaginaire de 80 colonnes, ceci parceque pratiquement tous les écrans peuvent afficher cette résolution. 1.3 Structuration par Blocs Le langage C# est un langage structuré par blocs, ce qui signifie que toutes les instructions sont encadrées dans des blocs délimités par une paire d'accolades. Ces blocs peuvent contenir une ou plusieurs instructions, ou encore être vides. Notez qu'une accolade n'est en elle-même pas une instruction et ne doit par conséquent pas être suivie d'un point-virgule. Un bloc de code C# peut dont se présenter ainsi : <ligne de code 1, expression 1>; <ligne de code 2, expression 2> <ligne de code 3, expression 3>; 27

Dans cet exemple les sections <ligne de code X, expression Y> ne sont pas du code exécutable C# mais du texte générique représentant n'importe quelle instruction. Ici, les deuxième et troisième lignes font partie de la même instruction, car la deuxième ligne ne se termine pas par un point-virgule. 1.4 Indentation du code Dans l'exemple précédent, nous avons utilisé l'indentation pour rendre le code C# plus lisible et rendre plus facile l'identification du début et de la fin des blocs. Il s'agit d'un pratique courant en programmation et cela fait partie des bonnes conventions de formattage du code. D'ailleurs, Visual Studio.net indente par défaut le code mais vous devrez le faire vous-même si vous n'utilisez qu'un éditeur de texte standard pour l'écriture du code. En régle générale, chaque bloc de code possède son propre niveau d'indentation. Les blocs de code peuvent être imbriqués les uns dans les autres et, dans ce cas, on utilise l'indentation de manière à identifier clairement de à quel bloc de code les instructions appartiennent : <ligne de code 1>; <ligne de code 2>; <ligne de code 3>; <ligne de code 4>; 28

1.5 Commentaires Les commentaires sont d'autres éléments courant dans le code C#, comme dans presque tous les langages de programmation. Il est d'usage d'insérer des commentaires décrivant l'action de blocs de code, de façon à faciliter la relecture du code. Les commentaires n'augmentent pas la taille des exécutables produits et ne sont pas pris en compte par le compilateur (sauf éventuellement pour les commentaires servant à générer la documentation XML). Il existe trois syntaxes de commentaires en C# : Commentaires simple ligne : // Les commentaires simple ligne peuvent être placés sur n'importe quelle ligne après deux caractères "slash" ("//"). Le double-slash indique le début du commentaire et la fin de la ligne indique la fin du commentaire. // Ceci est un commentaire Commentaires multi-lignes : /* */ Dans cette notation, les commentaires commencent par "/*" et se terminent par "*/". Cette notation est généralement utilisée pour écrire plusieurs lignes de commentaire sans avoir à inscrire un double-slash au début de chaque ligne, ou encore pour commenter plusieurs lignes de code d'un seul coup. Le commentaire ci-dessous est valide : /* Ceci est la première ligne du commentaire Ceci est la deuxième ligne du commentaire */... Code... Le commentaire suivant génère une erreur /* les commentaires sont souvent terminés avec la syntaxe "*/" */ En effet, les caractères figurant après "/*" sont considérés comme étant hors du commentaire, ce qui entraine une erreur de compilation. Commentaires de documentation XML : /// Il existe en C# un troisième type de commentaires qui servent à générer des fichiers d'aide. Ces commentaires ont une syntaxe spéciale basée sur XML et commencent par trois slash. Les commentaires XML possèdent différentes balises selon le type d'élement qu'ils documentent. Lors de la compilation, les commentaires XML sont extrait du code et insérés dans un fichier XML. On peut ensuite se servir de ce fichier pour générer de la documentation dans divers formats, il suffit pour cela de transformer le code XML en un format plus lisible, par exemple en HTML Visual Studio.net possèdent un outil d'auto-génération de pages web de documentation permettant la génération d'un mini-site en HTML exposant la documentation de la solution en cours sous une forme conviviale. 29

Voici un exemple de commentaire de documentation XML /// <summary> /// Fonction permettant l'addition de deux entiers /// </summary> /// <param name="nombre1">un entier</param> /// <param name="nombre2">un autre entier</param> /// <returns>le résultat de l'addition des deux nombres.</returns> static long addition (int nombre1, int nombre2) return (nombre1 + nombre2); Dès que l'on tape un triple slash ("///"), Visual Studio analyse le type de membre au dessus duquel le curseur se trouve et génère les balises XML nécessaires à sa description dans l'aide. Il ne nous reste plus qu'à documenter le membre en question et l'aide sera automatiquement générée sur demande par Visual Studio ou un autre outil de génération de documentation XML tel l'utilitaire Ndoc (téléchargeable sur : http://ndoc.sourceforge.net/download.html) Une référence complète des balises de documentation XML se trouve dans la documentation MSDN avec le titre : "Recommended Tags for Documentation Comments" et à l'adresse : ms-help: //MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/csref/html/vclrftagsfordocumentationcom ments.htm 30

1.5 Sensiblité à la Casse Il est extrêment important de noter que le langage C# est sensible à la casse, c'est-à-dire qu'il différencie les majuscules des minuscules. Cela peut causer des erreurs difficiles à trouver pour les débutants. Par exemple, si l'on considère le code suivant :... code... int aa;... AA = 0; // attention! ici AA est en majuscules Ce code provoquera une erreur du compilateur car la variable "aa" n'est pas la même que la variable "AA" qui n'a pas été déclarée. Le compilateur indique donc que la variable "AA" n'existe pas. Ce peut paraître une contrainte mais c'est en fait très pratique pour peu que l'on se fixe des règles de codage strictes. Un certain nombre de ces règles peuvent être consultées dans l'annexe de ce support nommée "Conventions de codage". NOTE : Un excellent document sur les conventions de codage et les bonnes pratiques de programmation avec C# et.net est disponible sur le site de Juwal Lowy sur le site www.idesign. net à l'adresse suivante : http://www.componentware.net/idesign/download/idesign CSharp Coding Standard.zip 31

2. Notre premier programme : HelloWorld.cs Commençons à rentrer dans la pratique en examinant l'exemple de code suivant stocké dans le fichier "helloworld.cs" using System; namespace CSharp.Introduction class Class1 /// <summary> /// Point d'entrée de l'application /// </summary> [STAThread] static void Main(string[] args) string message; message = "Hello World!"; Console.WriteLine("Hello World!"); Tout d'abord voici ce que fait cette application : elle affiche le texte "Hello World" dans la fenêtre de commande DOS. On peut constater que tous les éléments syntaxiques (points-virgule, accolades, commentaires, code indenté) abordés dans les points précédents figurent bien dans ce code. En fait, la section de code suivante est la plus importante pour notre exemple : [STAThread] static void Main(string[] args) string message; message = "Hello World!"; Console.WriteLine(message); Il s'agit du code exécuté lors du lancement de l'application console. Plus exactement, le code exécuté est tout ce qui se trouve entre les accolades. Nous ne nous préoccuperons pas des autres lignes de code dans cet exemple (comme par exemple la manière dont l'application atteint l'instruction Console.WriteLine(message); car l'objectif de ce chapitre est d'étudier la syntaxe C# de base. Les premiers éléments que nous allons détailler sont les variables. 32

3. Les Variables dans C# 3.1 Concept de variable La mémoire vive (ou RAM) d un ordinateur est donc constituée d un grand nombre de cases (bits), chacune d entre elles pouvant prendre soit la valeur 0 soit la valeur 1. Chacune de ces cases possède une «adresse», ce qui permet d identifier la case de manière unique. Or ce ne serait pas très pratique d avoir à gérer (et à mémoriser) les adresses de toutes les données que nous désirons stocker dans la mémoire. On dispose donc de ce que l on appelle des variables. Une variable n est donc rien de plus qu un zone de la mémoire, à laquelle on va référer non par son adresse mais par un nom, qui sera le nom de la variable. Lorsque l on souhaitera interagir avec cette zone particulière de la mémoire (soit dit, lire son contenu ou écrire dans son contenu), on référera à la zone en question par le nom de la variable. Definition : laquelle Une variable est une zone dans la mémoire auquelle on a affecté un nom. Une fois une variable déclarée, on peut interagir avec la zone mémoire vers "pointe" la variable pour y stocker ou y lire des données. Les variables possèdent : Un nom Un Type de données Une portée Une valeur Chaque variable possède un type bien particulier qui indique au compilateur le volume nécessaire que celuici doit réserver dans la mémoire pour la variable. Le volume de mémoire occupé par une variable dépendra donc du type de données que l on aura affecté à la variable. La portée d une variable définit en gros son étendue et l'état de sa visibilité par rapport à d'autres éléments. Par exemple, si une variable vara est définie dans une procédure ProcA() est-ce que la procédure ProcB() pourra voir et utiliser cette variable? Cela dépend de ce que l on appelle la portée de la variable Note : en fait ceci est une simplification du concept de portée car la portée d'une variable peut également dépendre de sa position dans la classes, ainsi que de plusieurs autres paramètres que nous détaillerons lorsque nous aborderons la création de classes. Pour l'instant, considérons seulement que la portée d'une variable définit sa visibilité par rapport à d'autres éléments de code. Regardons maintenant comment la manière dont les valeurs des variables sont stockées en mémoire. 33

3.2 Représentation en mémoire Les ordinateurs utilisent pour un système de notation en bits pour stocker des valeurs temporairement dans la mémoire vive ou RAM de l ordinateur. Ceci veut dire que, quelle que soit la valeur et le type de données que l on souhaite stocker dans la mémoire vive, celle-ci pourra toujours être décrite sous la forme d une suite de bits. Examinons tout d abord comment fonctionne la notation binaire (sous forme de bits) : Prenons l exemple du chiffre 27. En notation binaire, ce chiffre vaut 11011, chaque nombre représentant une puissance de 2. Le diagramme suivant nous montre comment le chiffre 27 est représenté en base 10 et en notation binaire : Base 10 En base 10, chaque chiffre (2 et 7) représente une puissance de 10. Pour trouver quel chiffre est représenté par la «suite de nombre en base 10», on multiplie chaque nombre par la puissance de 10 correspondant à sa position et l on additionne tous les chiffres ainsi obtenus : (7 * 10 0 ) + (2 * 10 1 ) = 27 10 7 10 6 10 5 10 4 10 3 10 2 10 1 10 0 10 000 000 1 000 000 1 00 000 10 000 1000 100 10 1 0 0 0 0 0 0 2 7 Notation Binaire En notation binaire (ou base 2), chaque chiffre représente une puissance de 2. Pour calculer quel chiffre est représenté par la «suite de nombre en base 2»», on multiplie chaque nombre par la puissance de 2 correspondant à sa position et l on addition tous les chiffres ainsi obtenus : (1 * 2 4 ) + (1 * 2 3 ) + (1 * 2 1 ) + (1 * 2 0 ) = 27 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 128 64 32 16 8 4 2 1 0 0 0 1 1 0 1 1 On constate d après le diagramme suivant que le plus grand nombre que nous pouvons stocker sur 8 bits est 255 (ou 11111111 en notation binaire). 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 128 64 32 16 8 4 2 1 1 1 1 1 1 1 1 1 En effet : (1*2 0 )+(1*2 1 )+(1*2 2 )+(1*2 3 )+(1*2 4 )+(1*2 5 )+(1*2 6 )+(1*2 7 ) = 255 Mais nous n avons évoqué ici que le cas des nombres entiers positifs. Comment serait par exemple stocké le chiffre négatif 27? 34

Types numériques signés et non-signés Ce problème est résolu en réservant un bit pour stocker le signe, avec une valeur de 1 pour le signe Plus et une valeur de 0 pour le signe Moins, comme démontré dans le tableau ci-dessous : Signe 2 6 2 5 2 4 2 3 2 2 2 1 2 0 + ou - 64 32 16 8 4 2 1 On remarque que l étendue des chiffres que nous pouvons stocker sur 8 bits va maintenant de 128 à +127. Il faut donc distinguer, pour les valeurs numériques les types de données «signés» et les types de données «non-signés». Les types signés réservent un de leurs bits pour stocker le signe, alors que les types non-signés n ont pas de bits réservés pour le signe. Par exemple voici les bornes minimales et maximales pour une variable numérique sur 8 bits (appelé également octet ou Byte) signée et non signée : Type de variable Borne Min Borne Max Signée -128 +127 Non-Signée 0 255 Un procédé similaire est utilisé pour stocker des nombres décimaux (i.e. un bit est réservé pour stocker l emplacement de la virgule) Chaînes de caractères (Strings) Il va de soi que l on peut vouloir stocker dans la mémoire des informations non-numériques, par exemple des chaînes de caractères. Regardons maintenant comment sont représentées en mémoires ces chaînes de caractères : Supposons donc que nous voulions stocker dans la mémoire la chaîne de caractères «abcde» Les ordinateurs ne comprennent que les valeurs numériques. Il n est donc pas possible de stocker directement les lettres dans la mémoire. Au lieu de cela, nous allons stocker dans la mémoire l équivalent numérique de chacune des lettres de la chaîne de caractères. On utilise pour cela la classification standard ASCII (American Standard Code for Information Interchange) ou encore la classification UNICODE. Dans le standard ASCII, chaque lettre occuppe un octet et dans le standard UNICODE, chaque lettre occuppe deux octets (la classification UNICODE a été définie pour permettre de stocker tous les caractères existant dans toutes les langues, ce qui explique pourquoi stocker un caractère UNICODE prend deux octets alors que l'on en prend q'un en ASCII). 35