• 20 hours
  • Easy

Free online content available in this course.

Paperback available in this course

course.header.alt.is_certifying

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 11/28/19

Utilisez le framework .NET

Log in or subscribe for free to enjoy all this course has to offer!

Comme on l'a déjà évoqué, le framework .NET est une énorme boîte à outils qui contient beaucoup de méthodes permettant de construire toutes sortes d'applications.  
Nous allons avoir besoin régulièrement d'utiliser les éléments du framework .NET pour réaliser nos applications. Il est donc grand temps d'apprendre à savoir le manipuler !

Rentrons tout de suite dans le vif du sujet.

L’instruction using

Nous allons sans arrêt solliciter la puissance du framework .NET. Par exemple, nous pouvons lui demander de nous donner la date courante.

Pour ce faire, on utilisera l’instruction :

Console.WriteLine(DateTime.Now);

Ce qu’il se passe ici, c’est que nous demandons à notre application l’affichage de la propriété Now de l’objet DateTime. Nous allons revenir en détail sur ce que sont des propriétés et des objets dans le prochain cours, considérez pour l’instant qu’ils correspondent simplement à une instruction qui nous fournit la date du moment.

Ce qui donne :

Image utilisateur

En fait, pour accéder à la date courante, on devrait normalement écrire :

System.Console.WriteLine(System.DateTime.Now);

Car les objets DateTime et Console se situent dans l’espace de nom « System ».

C’est un peu comme des répertoires, nous pouvons dire que le fichier « DateTime » est rangé dans le répertoire « System » et quand nous souhaitons y accéder nous devons fournir l’emplacement complet du fichier, à savoir System.DateTime.

Cependant, plutôt que d’écrire le chemin complet à chaque fois, il est possible de dire : « ok, maintenant, à chaque fois que je vais avoir besoin d’accéder à une fonctionnalité, va la chercher dans l’espace de nom « System ». Si elle s’y trouve, utilise la ».

C’est ce qu’il se passe grâce à l’instruction

using System;

qui a été générée par Visual Studio Express au début du fichier.

Elle indique au compilateur que nous allons « utiliser » (using) le namespace System dans notre page. Ainsi, il n’est plus obligatoire de préfixer l’accès à DateTime par « System. ». C’est une espèce de raccourci.
Pour conserver l’analogie avec les répertoires et les fichiers, on peut dire que nous avons ajouté le répertoire « System » dans le path.

Pour résumer, l’instruction :

System.Console.WriteLine(System.DateTime.Now);

est équivalente aux deux instructions :

using System;

et

Console.WriteLine(DateTime.Now);

Sachant qu’elles ne s’écrivent pas côte à côte. En général, on met l’instruction using en entête du fichier .cs, comme ce qu’a fait Visual Studio Express lorsqu’il a généré le fichier. L’autre instruction étant à positionner à l’endroit adéquat où nous souhaitons qu’elle soit exécutée.

À noter que dans ce cas-là, si Visual Studio Express reconnait l’instruction mais que l’espace de nom n’est pas inclus, il le propose en soulignant le début du mot « DateTime » d’un petit trait bleu et blanc.

Image utilisateur

Un clic droit sur le mot permettra d’ouvrir un menu déroulant, de choisir « Résoudre » et d’importer le using correspondant automatiquement.

Image utilisateur

La bibliothèque de classes .NET

Vous aurez l’occasion de découvrir que le framework .NET fourmille d’espace de noms contenant plein de méthodes de toutes sortes permettant de faire un peu tout et n’importe quoi. Une vraie caverne d’ali-baba.

Parmi les nombreuses fonctionnalités du framework .NET, nous avons une méthode qui nous permet de récupérer l’utilisateur courant (au sens « utilisateur windows »), on pourra par exemple utiliser l’instruction suivante :

System.Console.WriteLine(System.Environment.UserName);

Qui nous affichera :

Image utilisateur

Ou, comme vous le savez désormais, on pourra utiliser conjointement :

using System;

et

Console.WriteLine(Environment.UserName);

Pour produire le même résultat.

Petit à petit vous allez retenir beaucoup d’instructions et d’espaces de nom du framework .NET mais il est inimaginable de tout retenir. Il existe une documentation répertoriant tout ce qui compose le framework .NET, c’est ce qu’on appelle la MSDN library. Elle est accessible à cette adresse : http://msdn.microsoft.com/fr-fr/library/.

Par exemple, la documentation de la propriété que nous venons d’utiliser est consultable à cette adresse.

Nous avons désigné la caverne d’ali-baba par le mot « framework .NET ». Pour être plus précis, la désignation exacte de cette caverne est : « la bibliothèque de classe .NET ». Le mot « framework .NET » est en général utilisé par abus de langage (et vous avez remarqué que j’ai moi-même abusé du langage !) et représente également cette bibliothèque de classe. Nous reviendrons plus tard sur ce qu’est exactement une classe, pour l’instant, vous pouvez voir ça comme des composants ; une bibliothèque de composants.

Référencer une assembly

Ca y est, nous savons accéder au framework .NET.

Mais d’ailleurs, comment se fait-il que nous puissions accéder aux méthodes du framework .NET sans nous poser de question ? Il est magique ce framework ? Où se trouve le code qui permet de récupérer la date du jour ?

Judicieuse question. Si on y réfléchit, il doit falloir beaucoup de code pour renvoyer la date du jour ! Déjà, il faut aller la lire dans l’horloge système, il faut peut-être l’adapter au fuseau horaire, la formater d’une façon particulière en fonction de la langue, etc. Tout ça est déjà fait, heureusement, dans la bibliothèque de méthodes du framework .NET.

Alors, où est-elle cette bibliothèque ? Et le reste ?

Dans des assemblys bien sûr. Comme on a vu, les assemblys possèdent des fragments de code compilés en langage intermédiaire. S’ils sont réutilisables, ils se trouvent dans des fichiers dont l’extension est .dll.

Le framework .NET est composé d’une multitude d’assemblys qui sont installés sur votre système d’exploitation, dans le GAC (global assembly cache) qui est un endroit où sont stockées ces assemblys afin de les rendre accessible depuis nos programmes.
Pour pouvoir utiliser ces assemblys dans notre programme, nous devons indiquer que nous voulons les utiliser. Pour ça, il faut les référencer dans le projet.
Si l’on déplie les références dans notre explorateur de solutions, nous pouvons voir que nous avons déjà pas mal de références qui ont été ajoutées par Visual Studio Express :

Les références par défaut ajoutées à la création d'un projet
Les références par défaut ajoutées à la création d'un projet

Ce sont des assemblys qui sont très souvent utilisées, c’est pour ça que Visual Studio Express nous les a automatiquement référencées. Toujours ce souci de nous simplifier le travail, qu’il est sympa !

Prenons par exemple la référence System.Xml. Son nom nous suggère que dedans est réuni tout ce qu’il nous faut pour manipuler le XML.
Commençons à taper System.Xml., la complétion automatique nous propose plusieurs choses.

Image utilisateur

On ne sait pas du tout à quoi elle sert, mais déclarons par exemple une variable de l’énumération ConformanceLevel :

System.Xml.ConformanceLevel level;

et compilons. Pas d’erreur de compilation.
Si vous supprimez la référence à System.Xml. (bouton droit, Supprimer),

Image utilisateur

et que vous compilez à nouveau, vous pouvez voir que ConformanceLevel est désormais souligné en rouge, signe qu’il y a un problème.

Image utilisateur

Par ailleurs, la compilation provoque l’erreur suivante :

Citation : Compilateur

Le type ou le nom d'espace de noms 'ConformanceLevel' n'existe pas dans l'espace de noms 'System.Xml' (une référence d'assembly est-elle manquante ?)

Loin d’être bête, Visual Studio Express nous affiche un message d’erreur plutôt explicite.

En effet, cette énumération est introuvable car elle est définie dans une assembly qui n’est pas référencée. C’est comme si on nous demandait de prendre le marteau pour enfoncer un clou, mais que le marteau n’est pas à coté de nous, mais au garage bien rangé !
Il faut donc référencer le marteau afin de pouvoir l’utiliser.
Pour ce faire, faisons un clic sur Références et ajoutons une référence.

Ajout d'une référence
Ajout d'une référence

Ici, nous avons plusieurs onglets sur la gauche (selon la version de Visual Studio que vous possédez, vous aurez peut-être une présentation légèrement différente).

La fenêtre d'ajout de références
La fenêtre d'ajout de références

Chaque onglet permet d’ajouter une référence à une assemblys.

  • L’onglet Assemblys et le sous onglet Framework permet de référencer une assembly présente dans le GAC, c’est ici que nous viendrons chercher les assemblys du framework .NET. Le sous onglet Extensions permet de trouver des assemblys qui ne font pas partie directement du Framework .NET.

  • L’onglet Solution permet de référencer des assemblys qui se trouvent dans notre solution. Dans la mesure où notre solution ne contient qu’un seul projet, l’onglet sera vide. Nous verrons plus tard comment utiliser cet onglet lorsque nous ajouterons des assemblys à nos solutions.

  • L’onglet COM permet de référencer une dll COM. Vous ne savez pas ce qu’est COM ? On peut dire que c’est l’ancêtre de l’assembly. Techniquement, on ne référence pas directement une dll COM, mais Visual Studio Express génère ce qu’on appelle un wrapper permettant d’utiliser la dll COM. Un wrapper est en fait une espèce de traducteur permettant d’utiliser la dll COM comme si c’était une assembly. Mais ne nous attardons pas sur ce point qui ne va pas nous servir, nous qui sommes débutants.

  • L’onglet Parcourir va permettre de référencer une assembly depuis un emplacement sur le disque dur. Cela peut-être une assembly tierce fournie par un collègue, ou par un revendeur, etc …

Retournons à nos moutons, repartons sur l’onglet Assemblys et recherchons l’assembly que nous avons supprimée, à savoir System.Xml.

Ajout de l'assembly System.Xml
Ajout de l'assembly System.Xml

Une fois trouvée, appuyez sur OK. Maintenant que la référence est ajoutée, nous pouvons à nouveau utiliser cette énumération…

Ouf ! :-°

Je ne comprends pas, j’ai supprimé toutes les références, mais j’arrive quand même à utiliser la date, le nom de l’utilisateur ou la méthode Console.WriteLine. Si j’ai bien compris, je ne devrais pas pouvoir utiliser des méthodes dont les assemblys ne sont pas référencées… C’est normal ?

Eh oui, il existe une assembly qui n’apparait pas dans les références et qui contient tout le cœur du framework .NET. Cette assembly doit obligatoirement être référencée, il s’agit de mscorlib.dll. Comme elle est obligatoire, elle est référencée par défaut dès que l’on crée un projet.

D’autres exemples

Il arrivera souvent que vous ayez besoin d’une fonctionnalité trouvée dans la documentation ou sur internet et qu’il faille ajouter une référence.
Ce sera peut-être une référence au framework .NET, à des bibliothèques tierces ou à vous. Nous verrons plus loin comment créer nos propres bibliothèques.

Dans la documentation MSDN, il est toujours indiqué quelle assembly il faut référencer pour utiliser une fonctionnalité. Prenons par exemple la propriété DateTime.Now, la documentation nous dit :

Citation : MSDN

Espace de noms : System
Assembly : mscorlib (dans mscorlib.dll)

Cela veut donc dire qu’on utilise la date du jour en utilisant l’assembly obligatoire mscorlib et la fonctionnalité se trouve dans l’espace de nom « System », comme déjà vu.

Il n’y a donc rien à faire pour pouvoir utiliser DateTime.Now.
En imaginant que nous ayons besoin de faire un programme qui utilise des nombres complexes, vous allez surement avoir besoin du type Complex, trouvé dans la documentation.

Pour l’utiliser, comme indiqué, il va falloir référencer l’assembly System.Numerics.dll.
Rien de plus simple, répétons la procédure pour référencer une assembly et allons trouver System.Numerics.dll :

Ajout de l'assembly System.Numerics.dll
Ajout de l'assembly System.Numerics.dll

Ensuite, nous pourrons utiliser par exemple le code suivant :

Complex c = Complex.One;
Console.WriteLine(c);
Console.WriteLine("Partie réelle : " + c.Real);
Console.WriteLine("Partie imaginaire : " + c.Imaginary);

Console.WriteLine(Complex.Conjugate(Complex.FromPolarCoordinates(1.0, 45 * Math.PI / 180)));

Sachant qu’il aura bien sûr fallu rajouter le :

using System.Numerics;

permettant d’avoir à éviter de préfixer Complex par System.Numerics. Mais ça, vous aviez trouvé tout seul, n’est-ce pas ? :)
Ce qui nous donnera :

Image utilisateur
En résumé
  • Le framework .NET est un ensemble d'assemblys qu'il faut référencer dans son projet afin d'avoir accès à leurs fonctionnalités.

  • On utilise le mot-clé using pour inclure un espace de nom comme raccourci dans son programme, ce qui permet de ne pas avoir à préfixer les types de leurs espaces de noms complets.

Example of certificate of achievement
Example of certificate of achievement