Java では、型として別の注釈を持つ注釈パラメーターを宣言することで、注釈を作成することができます。たとえば、この構成を書くことができます。
@interface Copyright {
String value();
}
@interface Trademark {
String value();
}
@interface IP {
Copyright copyright();
Trademark trademark();
}
@IP(copyright = @Copyright("2013"), trademark = @Trademark("x is a trademark of x inc"))
class MyClass{}
C# 言語仕様では、有効な属性パラメーターの型が次のように記載されているため、同様のことを行うことは不可能であることが示唆されているようです。
- 次のいずれかの型: bool、byte、char、double、float、int、long、sbyte、short、string、uint、ulong、ushort。
- 型オブジェクト。
- タイプ System.Type。
- public アクセシビリティがあり、入れ子になっている型 (存在する場合) も public アクセシビリティを持っている場合は、enum 型。
- 上記の型の 1 次元配列。
次のように記述しようとすると、Visual Studio があらゆる種類の赤を点滅させます。
[IP (copyright=[Copyright("2008")],trademark=[Trademark("x is a trademark of x, inc")]]
しかし、言語仕様が話しているこの「型オブジェクト」はどうでしょうか? 私の属性はポリモーフィズムのおかげで「オブジェクトです」ので、Javaが許可することをC#で達成することはまったく可能ですか? そうでない場合、「型オブジェクト」はどのように機能しますか?