Vue d'ensemble du Common Language Runtime
Mise à jour : novembre 2007
Les compilateurs et les outils exposent le fonctionnement du runtime et vous permettent d'écrire du code qui bénéficie de cet environnement d'exécution managée. Le code que vous développez à l'aide d'un compilateur de langage ciblant le runtime est appelé code managé ; il tire parti de fonctionnalités telles que l'intégration interlangage, la gestion interlangage des exceptions, la sécurité améliorée, la prise en charge du versioning et du déploiement, un modèle simplifié de l'interaction des composants, ainsi que des services de débogage et de gestion de profils.
Pour permettre au runtime de fournir des services au code managé, les compilateurs de langage doivent générer des métadonnées qui décrivent les types, les membres et les références de votre code. Les métadonnées sont stockées avec le code ; chaque fichier exécutable portable (PE) chargeable du Common Language Runtime contient des métadonnées. Le runtime utilise les métadonnées pour rechercher et charger des classes, placer des instances en mémoire, résoudre des appels de méthode, générer un code natif, appliquer la sécurité et définir les limites du contexte d'exécution.
Le runtime gère automatiquement la disposition des objets et manage les références aux objets, les libérant quand ils ne sont plus utilisés. Les objets dont la durée de vie est managée de cette façon sont appelés données managées. Le garbage collection élimine les fuites de mémoire ainsi que d'autres erreurs de programmation courantes. Si votre code est managé, vous pouvez utiliser des données managées, des données non managées, ou à la fois des données managées et non managées dans votre application .NET Framework. Dans la mesure où les compilateurs de langage fournissent leurs propres types, tels que des types primitifs, vous ne pouvez pas toujours savoir (ou avoir besoin de savoir) si vos données sont managées.
Le Common Language Runtime facilite la conception de composants et d'applications dont les objets interagissent entre les langages. Les objets écrits dans des langages différents peuvent communiquer les uns avec les autres, et leurs comportements peuvent être fortement intégrés. Par exemple, vous pouvez définir une classe puis utiliser un langage différent pour dériver une classe de votre classe d'origine ou appeler une méthode pour la classe d'origine. Vous pouvez également passer une instance d'une classe à une méthode d'une classe écrite dans un autre langage. Cette intégration interlangage n'est possible que parce que les outils et les compilateurs de langage ciblant le runtime utilisent un système de type commun défini par le runtime, et qu'ils suivent les règles établies par le runtime en matière de définition de nouveaux types, ainsi que de création, d'utilisation, de persistance de types et de liaison avec ceux-ci.
Au sein de leurs métadonnées, tous les composants managés comportent des informations relatives aux composants et aux ressources pour lesquels ils ont été générés. Le runtime exploite ces informations pour s'assurer que votre composant ou application possède les versions spécifiées de tous les éléments dont il a besoin, ce qui rend votre code moins enclin aux arrêts provoqués par une dépendance sans correspondance. Les informations d'inscription et les données d'état ne sont plus stockées dans le Registre où il peut être difficile de les implanter et de les gérer. Au lieu de cela, les informations relatives aux types que vous définissez (et leurs dépendances) sont stockées avec le code en tant que métadonnées, rendant les tâches de réplication et de suppression de composants beaucoup moins compliquées.
Les outils et les compilateurs de langage exposent le fonctionnement du runtime selon des modes qui se veulent utiles et intuitifs pour les développeurs. Cela signifie que certaines fonctionnalités du runtime peuvent se faire remarquer davantage dans un environnement que dans un autre. Les fonctionnalités du runtime dépend des compilateurs de langage ou des outils utilisés. Par exemple, si vous êtes un développeur Visual Basic, vous pouvez remarquer qu'avec le Common Language Runtime, le langage Visual Basic dispose davantage de fonctionnalités orientées objet qu'avant. Le runtime présente certains avantages dont les suivants :
Amélioration des performances.
Possibilité d'utiliser facilement des composants développés dans d'autres langages.
Types extensibles fournis par une bibliothèque de classes.
Nouvelles fonctionnalités de langage telles que l'héritage, les interfaces et la surcharge pour la programmation orientée objet ; la prise en charge de threads Free explicites qui permettent la création d'applications modulables multithread ; la prise en charge de la gestion structurée des exceptions et des attributs personnalisés.
Si vous utilisez Microsoft® Visual C++® .NET, vous pouvez écrire du code managé à l'aide de Visual C++, qui offre les avantages d'un environnement d'exécution managée ainsi que l'accès à de puissantes fonctions et à des types de données expressifs qui vous sont familiers. Le runtime offre également les fonctionnalités suivantes :
Intégration interlangage, notamment l'héritage interlangage.
Garbage collection, qui manage la durée de vie des objets et rend ainsi le décompte de références inutile.
Objets autodescriptifs, qui rendent l'utilisation de l'IDL (Interface Definition Language) superflue.
Possibilité de compiler une seule fois et de réaliser l'exécution sur tout processeur et tout système d'exploitation prenant en charge le runtime.
Vous pouvez aussi écrire un code managé à l'aide du langage C#, qui apporte les avantages suivants :
Design entièrement orienté objet.
Très forte sécurité des types.
Un bon compromis entre la simplicité de Visual Basic et la puissance de C++.
Garbage collection.
Syntaxe et mots clés similaires à ceux de C et C++.
Utilisation de délégués de préférence aux pointeurs fonction pour une sécurité de type et une sécurité accrues. Les pointeurs fonction sont disponibles via l'utilisation du mot clé C# unsafe et l'option /unsafe du compilateur C# (Csc.exe) pour les données et le code non managés.