1

在 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。
  • 枚举类型,前提是它具有公共可访问性,并且它嵌套的类型(如果有)也具有公共可访问性。
  • 上述类型的一维数组。

当我尝试编写时,Visual Studio 会向我闪烁各种红色:

[IP (copyright=[Copyright("2008")],trademark=[Trademark("x is a trademark of x, inc")]]

但是语言规范所说的这个“类型对象”呢?由于多态性,我的属性“是一个”对象,那么在 C# 中实现 Java 允许的功能是完全可能的吗?如果不是,那么“类型对象”如何工作?

4

1 回答 1

0

Marc Gravell 说“不,你不能那样做”

于 2013-08-23T13:31:25.393 回答