【问题标题】:Does the order of attributes have any guarantees?属性的顺序有什么保证吗?
【发布时间】:2017-12-14 21:39:40
【问题描述】:

如果多个属性应用于一个成员,例如

[Foo]
[Bar]
void Baz() { ... }

那么 CLR/.NET 规范是否保证了它们在通过反射检索时将按什么顺序检索(例如Attribute.GetCustomAttributes)?这些方法的文档并没有明确说明,虽然它们似乎是按照它们的应用顺序返回的,但我不想依赖未记录的行为,因为那只是自找麻烦。

至于为什么这可能很重要,想象一下属性是用来指示该方法应该有一系列拦截器,这些拦截器应该以特定的顺序运行。

【问题讨论】:

    标签: .net attributes


    【解决方案1】:

    17.2 Attribute specification 没有,看来不是这样。

    属性的顺序 在这样的列表中指定,并且 附加部分的顺序 安排相同的节目实体, 不重要。例如, 属性规范 [A][B], [B][A]、[A,B] 和 [B,A] 是 等价的。

    【讨论】:

    【解决方案2】:

    依靠订购这种事情通常是一个坏主意。如果顺序很重要,我会给属性一个 Priority 属性,这样它就可以变得非常明确。

    我不知道有任何保证可以按原始顺序检索它们。

    【讨论】:

    • 是的,我同意。我给了他们一个AspectOrder 属性来控制它,但我只是好奇是否有必要保证顺序而不是意图。
    【解决方案3】:

    imo 属性不应该有顺序,因为它们不是流控制结构。

    我猜你可以在属性中添加一个 priority 属性并使用它来确定运行顺序?

    【讨论】:

    • gargh - 被 Skeet 打败,我为什么要打扰? ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多