为什么ICustomAttributeProvider.GetCustomAttributes()
返回object[]
而不是Attribute[]
?为什么ICustomAttributeProvider.GetCustomAttributes()返回object []而不是Attribute []?
使用mscorlib的ICustomAttributeProvider
实现时是否有任何情况,并且系统程序集将返回非类型为Attribute
的对象?
为什么ICustomAttributeProvider.GetCustomAttributes()
返回object[]
而不是Attribute[]
?为什么ICustomAttributeProvider.GetCustomAttributes()返回object []而不是Attribute []?
使用mscorlib的ICustomAttributeProvider
实现时是否有任何情况,并且系统程序集将返回非类型为Attribute
的对象?
的CLI规范(ECMA 335)分区Ⅱ,第21层的状态的部分:
虽然 任何用户定义的类型可以用来作为一个属性,CLS遵守需要 类型的属性将是实例其基类是
System.Attribute
。
换句话说,这是不是一种语言符合CLS可能允许您指定不从Attribute
派生属性,所以GetCustomAttributes
方法可能设计为允许消耗这样的属性。
我敢肯定,没有这样的非CLS兼容的语言存在,而.NET不支持它,但可以想见的是反思的设计者不想排除在未来的可能性。
至于你的第二个问题,快速检查System.Reflection
的源代码表明你总是得到一个Attribute[]
回来。由于返回的对象始终为Attribute[]
,因此您可以安全地投射它们,但不能保证它始终以此方式工作。
通过快速浏览Reflector,在每个使用它们的地方,它们都会执行到Attribute []的安全转换,所以我认为对于您来说这样做是安全的。
你能指出这个的任何特定实例吗? – Gabe 2011-05-08 04:21:22