C# Attribute.IsDefined与MemberInfo.IsDefined-继承参数的差异

C# Attribute.IsDefined与MemberInfo.IsDefined-继承参数的差异,c#,.net,inheritance,properties,attributes,C#,.net,Inheritance,Properties,Attributes,我的问题涉及属性继承属性的检查 方法(1)和(2)中描述的方法基本相同。两者都在检查是否使用了属性。但如果要检查属性,则inherit参数存在严重差异: (1): 如果为true,则指定还搜索元素的祖先以查找自定义属性 (2): true搜索此成员的继承链以查找属性;否则为false。对于属性和事件,忽略此参数。;见备注 (备注仅建议使用(1)) 使用(1)获取属性的继承属性没有问题。但是我的问题是为什么:为什么这个特性是这样实现的?原因是什么,用途还是好处?在我看来,有一种方法忽略了一个参数,

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

方法(1)(2)中描述的方法基本相同。两者都在检查是否使用了属性。但如果要检查属性,则inherit参数存在严重差异:

(1):

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

(2):

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

(备注仅建议使用(1)

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

我忽略了什么吗?

我的猜测(不再是猜测)——原因是向后兼容

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

这只是BCL中许多不一致之处之一…:)

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

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

这只是BCL中许多不一致之处之一…:)