ジェネリック属性に対する C# の制限を理解する
C# では、ジェネリック型を属性として使用することを禁止しています。 たとえば、次のコード:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
はコンパイルに失敗します。 この制限はよく知られていますが、その背後にある理由はあまり明確ではありません。
共通言語インフラストラクチャ (CLI) 仕様では、汎用属性を明示的に禁止していません。 ただし、C# 3 仕様 (セクション 10.1.4) では、正当な理由なく禁止することが明確に述べられています。 ECMA C# 2 仕様では、これ以上の明確な説明はありません。
調査によると、この決定は技術的な制約に基づいたものではなく、設計上の選択に基づくものでした。 Eric Lippert 氏 (要約) によると、汎用属性をサポートすることによって追加される複雑さが利点を上回り、開発者に実質的な価値を提供することなく、より複雑な言語とコンパイラをもたらすことになります。
以上がC# がジェネリック属性を持てないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。