Maison > Problème commun > Que sont les génériques .net ?

Que sont les génériques .net ?

藏色散人
Libérer: 2019-05-05 16:09:53
original
3671 Les gens l'ont consulté



Que sont les génériques .net ?

Introduction aux génériques :

Generic Type est l'une des fonctionnalités les plus puissantes de .NET Framework 2.0. L'idée principale des génériques est de séparer complètement les algorithmes des structures de données, afin qu'un algorithme défini une fois puisse agir sur plusieurs structures de données, réalisant ainsi un développement hautement réutilisable. Les génériques vous permettent de définir des structures de données de type sécurisé sans avoir besoin d'utiliser des types de données réels, ce qui améliorera considérablement les performances du système et aboutira à un code de haute qualité (puisque les algorithmes de traitement des données peuvent être réutilisés, il n'est pas nécessaire de dupliquer des types spécifiques). code).

Comment fonctionnent les génériques :

Les génériques vous permettent de définir des classes dont le type est sécurisé et qui ne nuisent pas aux performances ou à la productivité. En apparence, la syntaxe des génériques C# est similaire à celle des modèles C++, mais il existe des différences importantes dans la manière dont les compilateurs les implémentent et les prennent en charge. Par rapport aux modèles C++, les génériques C# peuvent offrir une sécurité améliorée, mais leurs fonctionnalités sont également quelque peu limitées. Dans certains compilateurs C++, le compilateur ne compilera même pas le code du modèle tant que la classe du modèle n'est pas utilisée via un type spécifique. Lorsqu'un type est effectivement spécifié, le compilateur insère le code en ligne et ajoute chaque occurrence d'un paramètre de type général. sont remplacés par le type spécifié. De plus, chaque fois qu'un type spécifique est utilisé, le compilateur insère du code spécifique à ce type, que le type ait été spécifié ailleurs dans l'application pour la classe modèle, ce que l'éditeur de liens C++ ne résout pas toujours et ne fonctionne pas toujours. cela peut également entraîner une surcharge du code, ce qui augmente les temps de chargement et l'empreinte mémoire.

Dans .net Framewrok 2.0, les génériques bénéficient d'un support natif dans l'IL et le CLR lui-même. Lors de la compilation de code C# générique, comme tout autre type, le compilateur le compilera d'abord en IL. Cependant, IL ne contient que des paramètres ou des espaces réservés du type spécifique réel, et il existe des instructions IL dédiées pour prendre en charge les opérations génériques. Le code générique contient des informations génériques dans ses métadonnées. Le véritable travail d'instanciation générique s'effectue « à la demande » lors de la compilation JIT. Lorsque la compilation JIT est effectuée, le compilateur JIT remplace T dans les métadonnées du code IL générique par le paramètre réel de type spécifié pour instancier le type générique. Cela amène le compilateur JIT à fournir des définitions de métadonnées IL spécifiques au type comme si les génériques n'étaient jamais impliqués. Le compilateur JIT peut garantir l'exactitude des paramètres, implémenter des contrôles de sécurité des types et même effectuer des IntelliSense spécifiques au type.

Lorsque .net compile du code IL générique en code natif, le code natif résultant dépend du type spécifié. Le compilateur JIT détecte que du code IL d'un type spécifique a été généré. Si le type de valeur natif est spécifié, le compilateur JIT remplace le paramètre de type générique par le type de valeur spécifié et le compile en code natif. Si le compilateur JIT compile du code IL générique avec un type valeur qui a été compilé en code natif, seule une référence au code IL est renvoyée. Étant donné que le compilateur JIT utilisera le même code IL spécifique au type de valeur à toutes les occasions ultérieures, il n'y a pas de problème de surcharge du code. Si la spécification native est un type référence, le compilateur JIT remplace le paramètre générique du type IL générique par un objet et le compile en code natif. Lors de toute demande future de types de référence plutôt que de paramètres de type génériques, le compilateur JIT réutilisera simplement le code réel, avec lequel les instances se voient toujours allouer de l'espace à la taille où elles ont quitté le tas géré, et il n'y aura pas de transtypage.



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal