これにより、コンパイル時の例外が発生します。
public sealed class ValidatesAttribute<T> : Attribute
{
}
[Validates<string>]
public static class StringValidation
{
}
C# はジェネリック属性をサポートしていないことはわかっています。しかし、グーグルでいろいろ検索しても、その理由がわかりません。
ジェネリック型が から派生できない理由を知っている人はいますかAttribute
? 何か理論はありますか?
ベストアンサー1
まあ、なぜ利用できないのかは答えられませんが、 CLI の問題ではないことは確認できます。CLI 仕様ではこれについて言及されていません (私が見る限り)。IL を直接使用する場合は、汎用属性を作成できます。これを禁止している C# 3 仕様の部分 (セクション 10.1.4「クラス ベース仕様」) には、正当性が示されていません。
注釈付きの ECMA C# 2 仕様でも、許可されていない例が示されていますが、役立つ情報は提供されていません。
注釈付きの C# 3 仕様のコピーが明日届く予定です... そこにさらに情報があるかどうか確認してみます。いずれにせよ、これはランタイムの決定ではなく、言語の決定であることは間違いありません。
編集: Eric Lippert からの回答 (要約): 特に理由はありませんが、あまり価値を追加しないユースケースで言語とコンパイラーの両方の複雑さを回避するためです。