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

this Question中所述,方法Attribute.IsDefined(MemberInfo, Type, Boolean)(1)和MemberInfo.IsDefined(Type, Boolean)(2)基本相同。两者都在检查是否使用了属性。但是,如果我要检查属性,则继承参数会存在严重差异:

(1):


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


(2):


  搜索此成员的继承链以找到属性为true;否则为false。属性和事件将忽略此参数;否则为false。请参阅备注。


(这些备注仅建议使用(1))

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

我有事吗

最佳答案

我的猜测(这不再是猜测)-原因是向后兼容。

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

BCL中众多不一致性之一... :)

关于c# - Attribute.IsDefined与MemberInfo.IsDefined-继承参数的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38565778/

10-11 22:10