Maison >développement back-end >C++ >Pourquoi C# n'autorise-t-il pas les types d'attributs génériques ?

Pourquoi C# n'autorise-t-il pas les types d'attributs génériques ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-18 22:51:12250parcourir

Why Doesn't C# Allow Generic Attribute Types?

Restriction de C# sur les attributs génériques : une explication

C# offre une personnalisation étendue, mais exclut notamment les types d'attributs génériques. Cette limitation soulève la question : pourquoi ?

Tenter de définir un attribut personnalisé avec un paramètre de type générique entraîne une erreur de compilation, telle que :

<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { }

[Validates<string>]
public static class StringValidation { }</code>

Bien que Common Language Infrastructure (CLI) prenne en charge les attributs génériques, C# les interdit spécifiquement. Il ne s'agit pas d'une limitation CLI, mais plutôt d'un choix de conception C# interne.

Identifier la raison exacte de cette interdiction s’avère difficile. La spécification du langage C# n'offre pas d'explication claire. Cependant, les discussions communautaires et les avis d'experts suggèrent plusieurs possibilités.

Une théorie postule que les types d'attributs génériques introduiraient une complexité inutile dans le langage et le compilateur. La prise en charge de cette fonctionnalité nécessiterait des mécanismes de langage supplémentaires et des optimisations du compilateur pour maintenir la stabilité et les performances.

Une autre perspective est que les applications pratiques des attributs génériques sont limitées et que les coûts de développement dépassent les avantages potentiels. Les concepteurs C# ont peut-être donné la priorité à d'autres fonctionnalités.

Eric Lippert, un ancien membre de l'équipe C#, a fourni une explication succincte : la restriction existe pour éviter une complexité inutile à la fois dans le langage et dans le compilateur pour une fonctionnalité à la valeur pratique limitée. Bien que cela ne soit pas entièrement satisfaisant, cet aperçu met en lumière le processus décisionnel derrière les choix de conception de C#.

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!

Déclaration:
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