为什么ICustomAttributeProvider.GetCustomAttributes()
会返回object[]
而不是Attribute[]
?
使用mscorlib中的ICustomAttributeProvider
实现时是否存在任何情况?系统程序集将返回非{1}}类型的对象?
答案 0 :(得分:23)
CLI规范(ECMA 335)分区II,第21条部分说明:
虽然 任何用户定义的类型都可以用作属性,CLS合规性要求属性是实例 基类为
System.Attribute
的类型。
换句话说,不符合CLS的语言可能允许您指定不是从Attribute
派生的属性,因此GetCustomAttributes
方法可能旨在允许使用此类属性
我很确定没有这种非CLS兼容的语言,并且.NET不支持它,但可以想象,Reflection的设计者不希望将来排除这种可能性。
关于您的第二个问题,快速检查System.Reflection
的源代码表明您总是得到Attribute[]
。由于返回的对象始终为Attribute[]
,因此您可以安全地投射它们,但不能保证它始终以这种方式工作。
答案 1 :(得分:3)
通过快速查看Reflector,在每个使用它的地方都会对Attribute []执行安全转换,所以我想你也可以安全地执行相同操作。