21

为什么ICustomAttributeProvider.GetCustomAttributes()返回object[]而不是Attribute[]

使用 mscorlib 和 System 程序集的实现时是否有任何情况ICustomAttributeProvider会返回非类型的对象Attribute

4

2 回答 2

23

CLI 规范 ( ECMA 335 ) 第 II 部分第 21 条部分规定:

虽然任何用户定义的类型都可以用作属性,但 CLS 合规性要求属性将是其基类为 的类型的实例System.Attribute

换句话说,不符合 CLS 的语言可能允许您指定不派生自 的属性Attribute,因此该GetCustomAttributes方法可能旨在允许使用此类属性。

我很确定不存在这种不符合 CLS 的语言,并且 .NET 不支持它,但可以想象,Reflection 的设计者并不想排除未来的可能性。

至于你的第二个问题,快速检查源代码System.Reflection表明你总是得到Attribute[]回报。由于返回的对象总是Attribute[],您可以安全地转换它们,但不能保证它总是以这种方式工作。

于 2011-05-08T05:41:50.660 回答
3

通过快速浏览一下 Reflector,在每个使用它的地方,它们都会对 Attribute[] 执行安全强制转换,所以我想你也可以这样做。

于 2011-04-28T19:59:08.740 回答