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

时间:2011-04-28 19:17:02

标签: c# .net system.reflection getcustomattributes

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

使用mscorlib中的ICustomAttributeProvider实现时是否存在任何情况?系统程序集将返回非{1}}类型的对象?

2 个答案:

答案 0 :(得分:23)

CLI规范(ECMA 335)分区II,第21条部分说明:

  

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

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

我很确定没有这种非CLS兼容的语言,并且.NET不支持它,但可以想象,Reflection的设计者不希望将来排除这种可能性。

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

答案 1 :(得分:3)

通过快速查看Reflector,在每个使用它的地方都会对Attribute []执行安全转换,所以我想你也可以安全地执行相同操作。