2011-04-28 73 views

回答

22

的CLI规范(ECMA 335)分区Ⅱ,第21层的状态的部分:

虽然 任何用户定义的类型可以用来作为一个属性,CLS遵守需要 类型的属性将是实例其基类是System.Attribute

换句话说,这是不是一种语言符合CLS可能允许您指定不从Attribute派生属性,所以GetCustomAttributes方法可能设计为允许消耗这样的属性。

我敢肯定,没有这样的非CLS兼容的语言存在,而.NET不支持它,但可以想见的是反思的设计者不想排除在未来的可能性。

至于你的第二个问题,快速检查System.Reflection的源代码表明你总是得到一个Attribute[]回来。由于返回的对象始终为Attribute[],因此您可以安全地投射它们,但不能保证它始终以此方式工作。

3

通过快速浏览Reflector,在每个使用它们的地方,它们都会执行到Attribute []的安全转换,所以我认为对于您来说这样做是安全的。

+0

你能指出这个的任何特定实例吗? – Gabe 2011-05-08 04:21:22

相关问题