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

Posted

技术标签:

【中文标题】属性参数类型作为另一个属性【英文标题】:Attribute parameter types as another attribute 【发布时间】:2013-04-27 07:02:14 【问题描述】:

在 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】:

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

【讨论】:

以上是关于属性参数类型作为另一个属性的主要内容,如果未能解决你的问题,请参考以下文章

如何将向量作为参数传递给另一个向量?

TypeScript 参数属性

Mixin 属性作为另一个 mixin 的参数?

如何接受数据的“字典”作为自定义 .NET 属性参数?

第4章变量作用域和内存问题

MyBatis之传入参数