我的问题涉及检查属性的继承属性。
如this Question中所述,方法Attribute.IsDefined(MemberInfo, Type, Boolean) (1)和MemberInfo.IsDefined(Type, Boolean) (2)基本相同。两者都在检查是否使用了属性。但是如果我想检查一个属性,那么inherit参数会有很大的不同:
(1):
如果为true,则指定还搜索元素的祖先以获取自定义属性。
(2):
如果要搜索此成员的继承链以查找属性,则为true;否则,false。属性和事件忽略此参数;见备注。
(备注仅建议使用(1))
使用(1)获取属性的继承属性没问题。但我的问题是为什么:为什么这个功能会像这样实现?是什么原因,用途或好处?从我的观点来看,有一种方法忽略了一个参数,而这并不是一个干净的解决方案。
我忽略了什么吗?
答案 0 :(得分:3)
我的猜测(并且它 不再是猜测) - 原因是向后兼容性。
PropertyInfo.IsDefined
和EventInfo.IsDefined
忽略了inherit
参数,因为它们是在.NET 1.0中引入的。 Attribute
上的静态方法是在.NET 2.0中引入的,并进行了修改以支持属性和事件的继承。如果他们要改变这种行为,那么将inherit
设置为true的旧代码可能会开始获得意外的属性。
BCL中的许多不一致之处......:)