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

21
为什么ICustomAttributeProvider.GetCustomAttributes()返回object[]而不是Attribute[]
在使用mscorlib和System程序集中的ICustomAttributeProvider实现时,是否存在任何情况会返回不属于Attribute类型的对象?
2个回答

23

CLI规范(ECMA 335)第二部分第21条部分规定:

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

换句话说,不符合CLS的语言可能允许您指定不派生自Attribute的属性,因此GetCustomAttributes方法可能设计为允许使用这些属性。

我非常确定没有这样的不符合CLS的语言存在,.NET也不支持它,但可以想象Reflection的设计者们未来不希望排除这种可能性。

至于您的第二个问题,快速检查System.Reflection的源代码显示,您始终会得到一个Attribute[]。由于返回的对象始终是Attribute[],因此您可以安全地进行转换,但不能保证它总是以这种方式工作。


3
通过使用Reflector快速查看,在每个使用它的地方都进行了安全转换为Attribute[],所以我猜你也可以这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接