ホームページ >バックエンド開発 >C++ >C# がジェネリック属性を持てないのはなぜですか?

C# がジェネリック属性を持てないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-18 22:42:12391ブラウズ

Why Can't C# Have Generic Attributes?

ジェネリック属性に対する 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。