Maison >développement back-end >C++ >Pourquoi les types génériques ne sont-ils pas autorisés en tant que types de base d'attribut en C# ?
C# n'autorise pas les types génériques comme types de base d'attribut. Tenter cela, comme indiqué ci-dessous, entraîne une erreur de compilation :
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
Cette limitation, malgré le support générique étendu de C#, est déroutante pour beaucoup.
La spécification CLI n'interdit pas explicitement les attributs génériques. Cependant, l'examen direct par l'IL montre que leur création est possible. Cela indique la restriction provenant du langage C# lui-même.
Ni la spécification C# 3 (section 10.1.4) ni la spécification ECMA C# 2 n'offrent une explication claire de cette interdiction, malgré la documentation d'autres limitations d'attributs.
Eric Lippert, figure de proue de la communauté C#, suggère que la restriction simplifie à la fois le langage et son compilateur. Les avantages perçus de l'autorisation des attributs génériques sont jugés insignifiants par rapport aux complexités potentielles qu'ils pourraient introduire.
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!