为什么ICustomAttributeProvider.GetCustomAttributes()
返回object[]
而不是Attribute[]
?
使用 mscorlib 和 System 程序集的实现时是否有任何情况ICustomAttributeProvider
会返回非类型的对象Attribute
?
为什么ICustomAttributeProvider.GetCustomAttributes()
返回object[]
而不是Attribute[]
?
使用 mscorlib 和 System 程序集的实现时是否有任何情况ICustomAttributeProvider
会返回非类型的对象Attribute
?
CLI 规范 ( ECMA 335 ) 第 II 部分第 21 条部分规定:
虽然任何用户定义的类型都可以用作属性,但 CLS 合规性要求属性将是其基类为 的类型的实例
System.Attribute
。
换句话说,不符合 CLS 的语言可能允许您指定不派生自 的属性Attribute
,因此该GetCustomAttributes
方法可能旨在允许使用此类属性。
我很确定不存在这种不符合 CLS 的语言,并且 .NET 不支持它,但可以想象,Reflection 的设计者并不想排除未来的可能性。
至于你的第二个问题,快速检查源代码System.Reflection
表明你总是得到Attribute[]
回报。由于返回的对象总是Attribute[]
,您可以安全地转换它们,但不能保证它总是以这种方式工作。
通过快速浏览一下 Reflector,在每个使用它的地方,它们都会对 Attribute[] 执行安全强制转换,所以我想你也可以这样做。