反汇编代码中的属性顺序

时间:2011-01-06 14:29:28

标签: c# attributes reflector disassembly

在检查使用.NET Reflector导出的反汇编代码时,我注意到并不总是维护任何给定实体的attributes顺序。

我在比较同一个程序集的两个版本的反汇编代码时已经看到了这一点(在两个版本之间看到了一些小的代码更改),在版本之间没有实际更改的类中。

e.g。

[WebBrowsable, Personalizable]
public int SomeProperty ...

VS

[Personalizable, WebBrowsable]
public int SomeProperty ...

这非常不方便,因为它看起来好像没有改变的文件。

在这种情况下,什么控制属性的顺序,是否可以采取任何措施来维护订单?

2 个答案:

答案 0 :(得分:6)

根据specification

  

在这样的列表中指定属性的顺序,以及附加到同一程序实体的部分的顺序并不重要。例如,属性规范[A] [B],[B] [A],[A,B]和[B,A]是等效的。

这并不能说没有什么可以维持顺序,但确实说编译器不必关注属性的排序,因此可以自由重新排序觉得合适。如果您想保证订购,您可能需要在构建后修改程序集。可能有一种更简单的方法可以解决您的问题。

答案 1 :(得分:0)

属性的顺序不会影响代码的语义,而只是C#编译器如何编译项目的假象。它可能是混乱的新兴行为,取决于你的项目中还有什么。不幸的是,你无能为力......