L'architecture .NET
Introduction
Le Framework .NET est l’élément central des applications. Il gère l’exécution, l’allocation mémoire, les permissions. L’architecture .NET est principalement constituée de deux composants : d’une part le CLR (Common Language Runtime) et d’autre part les bibliothèques de classes.
Désormais, le .NET Core est disponible. Il s’agit d’un sous-ensemble du Framework .NET qui apporte les avantages suivants :
-
Portabilité : le code peut être porté sur différentes plateformes afin de maximiser la réutilisation de code.
-
Modularité : les solutions peuvent intégrer uniquement les librairies utiles pour ne pas surcharger les applications produites.
-
Open source : les codes sources sont disponibles sur GitHub (https://github.com/dotnet/) et permettent à tout le monde de contribuer.
Concernant spécifiquement les applications Windows, le déploiement n’a pas évolué, c’est-à-dire qu’une application s’appuie sur l’installation du Framework .NET de la machine cible. Si le Framework .NET n’est pas présent, l’utilisateur sera invité à l’installer. Dans le cas où l’application utiliserait une librairie .NET Core non incluse dans le Framework .NET, celle-ci sera embarquée dans...
CLR
Le CLR est l’environnement d’exécution des applications. Il est multilangage grâce au CLS (Common Language Specification) qui est un ensemble de règles à respecter pour un compilateur créant des applications à exécuter avec le CLR. La grande force du CLR est de pouvoir combiner plusieurs assemblages, quel que soit le langage dans lequel ils ont été écrits. Une application écrite en C# pourra ainsi faire référence et utiliser une librairie écrite en VB.
Pour en arriver à ce niveau de compatibilité, le compilateur convertit le code en langage intermédiaire (IL) permettant d’être interprété de la même manière, quel que soit le langage dans lequel le code a été écrit. La compatibilité des types entre les différents langages est assurée par le CTS (Common Types System). Chaque type de base d’un langage possède un équivalent dans le Framework .NET et donc en langage intermédiaire. Ainsi, un integer en VB et un int en C# seront du même type System.Int32.
Une fois compilée, une application se résume à au moins un fichier exécutable. Celui-ci est en langage intermédiaire. Lorsque l’exécution est lancée, le CLR examine le manifeste pour déterminer si les conditions...
Les bibliothèques de classes
Le Framework .NET est composé de plusieurs bibliothèques de classes, classées en espaces de noms, eux-mêmes organisés de manière hiérarchique à partir de l’espace de noms racine System. Les fonctionnalités en relation sont donc classées au sein d’un même espace de noms. System.IO, par exemple, regroupe les types ayant pour but d’interagir avec le système de fichiers.
Voici quelques espaces de noms couramment utilisés :
Espace de noms |
Description |
System |
Espace de noms racine. Il contient les types de base du Framework .NET. |
System.Collections |
Contient les types permettant de créer et de gérer les listes et les tableaux. |
System.Data |
Contient les types requis pour la manipulation et la communication avec les bases de données. |
System.Drawing |
Contient l’ensemble des types permettant de gérer le rendu graphique et le traitement d’éléments visuels. |
System.IO |
Contient l’ensemble des classes permettant d’interagir avec le système de fichiers. |
System.Windows.Forms |
Contient tous les types permettant la création d’applications Windows, que ce soient les formulaires ou les contrôles. |
Ces bibliothèques de classes sont consultables via l’explorateur d’objets depuis le menu Affichage - Explorateur d’objets...
Les types
Le Framework .NET est composé de deux sortes de types : les types valeur et les types référence. Pour stocker les données, le CLR dispose de deux zones de mémoire : la pile et le tas.
La pile a un fonctionnement du type « dernier entré, premier sorti ». Cette zone va héberger en mémoire les variables du programme. Ainsi, lorsqu’une fonction est appelée, ses paramètres sont stockés dans la pile et si cette fonction en appelle d’autres, les variables sont placées au-dessus des précédentes. À la fin de l’exécution de la fonction, les variables deviennent hors de portée et sont retirées de la pile libérant la mémoire occupée.
Le tas est une zone réservée au stockage des objets réutilisables. Le CLR gère les entrées et sorties de cet espace mémoire de manière automatique grâce à la récupération de la mémoire. Ce processus étant toujours actif, il est inutile de détruire explicitement les objets au sein de l’application. Le récupérateur s’exécute dans un processus de faible priorité qui peut augmenter si la mémoire a besoin d’être vidée plus rapidement. L’inconvénient principal est qu’il n’est pas possible de connaître...