属性参数类型作为另一个属性

时间:2013-04-27 07:02:14

标签: c# attributes

在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允许的是什么呢?如果没有那么“类型对象”如何工作?

1 个答案:

答案 0 :(得分:0)

Marc Gravell说:“不,你不能这样做”