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

本文关键字:object 返回 ICustomAttributeProvider GetCustomAttributes 为什么 | 更新日期: 2023-09-27 17:54:10

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

是否有任何情况下,当使用ICustomAttributeProvider实现从mscorlib和系统程序集将返回不是类型Attribute的对象?

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

CLI规范(ECMA 335)分区II,条款21部分规定:

,任何用户定义的类型都可以用作属性,CLS遵从性要求属性将是实例基类为System.Attribute的类型

换句话说,不兼容cls的语言可能允许您指定不来自Attribute的属性,因此GetCustomAttributes方法可能被设计为允许使用这些属性。

我很确定不存在这种不兼容cls的语言,而且。net也不支持它,但是可以想象,Reflection的设计者并不想在将来排除这种可能性。

至于你的第二个问题,快速检查System.Reflection的源代码表明,你总是得到一个Attribute[]。因为返回的对象总是Attribute[],所以可以安全地强制转换它们,但不能保证总是这样工作。

通过快速查看Reflector,在每个使用它的地方,它们执行一个安全的属性强制转换[],所以我猜你做同样的事情是安全的。

相关文章: