代码之家  ›  专栏  ›  技术社区  ›  Greg Beech

属性顺序是否有任何保证?

  •  7
  • Greg Beech  · 技术社区  · 15 年前

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

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

    那么,是否有任何由clr/.net规范作出的保证,即当通过反射(例如 Attribute.GetCustomAttributes )?这些方法的文档并没有明确说明,虽然看起来它们是按应用顺序返回的,但我不想依赖未记录的行为,因为这只是在自找麻烦。

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

    3 回复  |  直到 7 年前
        1
  •  12
  •   Wai Ha Lee captain-yossarian from Ukraine    7 年前

    不来自 17.2 Attribute specification 似乎不是这样。

    属性的顺序 在此类列表中指定,并且 节附加到的顺序 同一个程序实体被安排, 不重要。例如, 属性规范[A][B], [b][a]、[a,b]和[b,a]是 当量。

        2
  •  4
  •   Jon Skeet    15 年前

    依靠订购这种东西通常是个坏主意。如果顺序很重要,我会给属性一个priority属性,以便它可以非常明确。

    我不知道有什么保证能按原定顺序取回。

        3
  •  1
  •   RSlaughter    15 年前

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

    我想您可以向属性添加一个priority属性,并使用它来确定运行顺序?

    推荐文章