Attribute.IsDefined vs MemberInfo.IsDefined - 继承参数

时间:2016-07-25 10:50:15

标签: c# .net inheritance properties attributes

我的问题涉及检查属性的继承属性。

this Question中所述,方法Attribute.IsDefined(MemberInfo, Type, Boolean) (1)MemberInfo.IsDefined(Type, Boolean) (2)基本相同。两者都在检查是否使用了属性。但是如果我想检查一个属性,那么inherit参数会有很大的不同:

(1):

  

如果为true,则指定还搜索元素的祖先以获取自定义属性。

(2):

  

如果要搜索此成员的继承链以查找属性,则为true;否则,false。属性和事件忽略此参数;见备注。

(备注仅建议使用(1)

使用(1)获取属性的继承属性没问题。但我的问题是为什么:为什么这个功能会像这样实现?是什么原因,用途或好处?从我的观点来看,有一种方法忽略了一个参数,而这并不是一个干净的解决方案。

我忽略了什么吗?

1 个答案:

答案 0 :(得分:3)

我的猜测(并且它 不再是猜测) - 原因是向后兼容性。

PropertyInfo.IsDefinedEventInfo.IsDefined忽略了inherit参数,因为它们是在.NET 1.0中引入的。 Attribute上的静态方法是在.NET 2.0中引入的,并进行了修改以支持属性和事件的继承。如果他们要改变这种行为,那么将inherit设置为true的旧代码可能会开始获得意外的属性。

BCL中的许多不一致之处......:)