C# では、ジェネリック型を属性の基本型として使用できません。 これを試みると、以下に示すように、コンパイル時エラーが発生します:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
C# の広範な汎用サポートにもかかわらず、この制限は多くの人を困惑させています。
CLI 仕様では、汎用属性を明示的に禁止していません。 ただし、IL を直接検査すると、作成が可能であることが示されています。 これは、C# 言語自体に由来する制限を示しています。
C# 3 仕様 (セクション 10.1.4) も ECMA C# 2 仕様も、他の属性制限について文書化しているにもかかわらず、この禁止事項について明確な説明を提供していません。
C# コミュニティの主要人物である Eric Lippert 氏は、この制限により言語とそのコンパイラの両方が簡素化されると示唆しています。 汎用属性を許可することで認識されている利点は、それが引き起こす可能性のある潜在的な複雑さに比べれば、重要ではないと考えられています。
以上がC# でジェネリック型が属性ベース型として許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。