为什么ICustomAttributeProvider.GetCustomAttributes()返回object[]而
本文关键字:object 返回 ICustomAttributeProvider GetCustomAttributes 为什么 | 更新日期: 2023-09-27 17:54:10
为什么ICustomAttributeProvider.GetCustomAttributes()
返回object[]
而不是Attribute[]
?
是否有任何情况下,当使用ICustomAttributeProvider
实现从mscorlib和系统程序集将返回不是类型Attribute
的对象?
CLI规范(ECMA 335)分区II,条款21部分规定:
,任何用户定义的类型都可以用作属性,CLS遵从性要求属性将是实例基类为
System.Attribute
的类型
换句话说,不兼容cls的语言可能允许您指定不来自Attribute
的属性,因此GetCustomAttributes
方法可能被设计为允许使用这些属性。
我很确定不存在这种不兼容cls的语言,而且。net也不支持它,但是可以想象,Reflection的设计者并不想在将来排除这种可能性。
至于你的第二个问题,快速检查System.Reflection
的源代码表明,你总是得到一个Attribute[]
。因为返回的对象总是Attribute[]
,所以可以安全地强制转换它们,但不能保证总是这样工作。
通过快速查看Reflector,在每个使用它的地方,它们执行一个安全的属性强制转换[],所以我猜你做同样的事情是安全的。